0

TextBox1 の OnChange Event のセッション変数に Textbox の値を格納する必要があるシナリオに遭遇しました。

x のコンテンツを Session Variable に保存するにはどうすればよいですか。

//JavaScript 関数 TextBox1_TextChanged() {

     var x = document.getElementById("TextBox1").value;

     var SesVar = "'<%= Session["HitCount"] = x  %>'";

     alert(SesVar);

// HTML

 <asp:TextBox ID="TextBox1"  Name="TextBox1"  runat="server"    
  onchange="TextBox1_TextChanged()"></asp:TextBox>

上記の問題を解決する方法を提案してください。

4

4 に答える 4

0

それをしてはいけない。ページはサーバーからのものであるため、サーバーコードが最初に実行され、次にクライアントコードが残りを処理します。意図したことを実行する必要がある場合は、フォームでその値を使用して非表示の要素を作成し、GETまたはPOSTグローバル変数を介してその要素を取得してセッションに保存します。

<form method="get" action="destination.asp">
    <input id="tb1value" name="test" visibility="hidden"></input>
</form>

送信したら、javascript(またはjsライブラリであるjquery)を使用して、通常、必要な値をその非表示の値に入れてサーバーに送信します。

あなたの場合、テキストボックスを直接使用する必要があります。フォームがその役割を果たします。

このチュートリアルはあなたを助けるかもしれません

于 2013-03-23T04:17:17.730 に答える
0

// cookie を使用して別の解決策を見つけました。

// test.aspx コード

 <script language="javascript" type="text/javascript">

function writeCookie(name,value,days) {
    var date, expires;
    if (days) {
        date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        expires = "; expires=" + date.toGMTString();
            }else{
        expires = "";
    }
    document.cookie = name + "=" + value + expires + "; path=/";
}


function readCookie(name) {
    var i, c, ca, nameEQ = name + "=";
    ca = document.cookie.split(';');
    for (i = 0; i < ca.length; i++) 
       {
            c = ca[i];
            while (c.charAt(0)==' ') {
                c = c.substring(1,c.length);
            }
            if (c.indexOf(nameEQ) == 0) {
                return c.substring(nameEQ.length,c.length);
            }
       }
    return '';
}


function restore(){
    var sId = readCookie('sessionId');
    document.getElementById("TextBox1").value = sId ;
}


function backup() {

      var sId = document.getElementById("TextBox1").value;
      writeCookie('sessionId', sId, 3);
}


function getMyvalSession() {
            var ff = "Loading Value";
           return ff;
}


function TextBox1_TextChanged() {
          backup();
}


</script>


<body onload="restore()">

    <form id="form1" runat="server">
    <div>

         <asp:TextBox ID="TextBox1" Name="TextBox1" runat="server" 
          AutoPostBack="True" onchange="TextBox1_TextChanged()" ></asp:TextBox>

    </div>
    </form>
</body>

// test.aspx.cs コード

    protected void Page_Load(object sender, EventArgs e)
    {
         Loading();
    }


    void Loading (){

        String csname = "OnSubmitScript";
        Type cstype = this.GetType();

        // Get a ClientScriptManager reference from the Page class.
        ClientScriptManager cs = Page.ClientScript;

        // Check to see if the OnSubmit statement is already registered.
        if (!cs.IsOnSubmitStatementRegistered(cstype, csname))
        {
            string cstext = " document.getElementById(\"TextBox1\").value = getMyvalSession()  ; ";
            cs.RegisterOnSubmitStatement(cstype, csname, cstext);
        }


       }
于 2013-03-24T06:36:06.297 に答える
0

直接設定することはできません。
これには 2 つの方法があります。

最初のセットAutoPostBack to true

次のように

<asp:TextBox ID="TextBox1"  Name="TextBox1"  runat="server" AutoPostBack='true'    
 onchange="TextBox1_TextChanged"></asp:TextBox>

およびC#(コードビハインド)でTextBox1_TextChanged、コードを記述してセッションに設定します

于 2013-03-23T04:23:22.143 に答える
0

私の問題の解決策を見つけました。

    function TextBox1_TextChanged() {
       <%
          // c# code to store value runtime in session variable . 

          Session["HitCount1"] = TextBox1.Text ;

       %>

     }



   <body>
    <form id="form1" runat="server">
    <div>
         <%
  // C# code to retrieve session variable value .

    string x = null;
    x = Session["HitCount1"].ToString().Trim();

  if ((x.Equals(null)) || (x.Equals("")))
   { 
     // Session Variable is either empty or null .
     TextBox1.Text = ""; 

   } 
   else 
   {
     TextBox1.Text = Session["HitCount1"].ToString();
   }

          %>


<asp:TextBox ID="TextBox1"  Name="TextBox1"  runat="server" 
 AutoPostBack='true'  onchange="TextBox1_TextChanged()"></asp:TextBox>

 </form>
  </body>
于 2013-03-23T14:32:29.877 に答える