0

小さな問題があります。F5 を使用してページを更新すると、TextBox は古い値を保持する必要があります。Page_Load() で // Loading(); を保持する場合 その後、TextBox1 は古い値を保持します。
comment を削除するとすぐに、 TextBox1 の値が失われます。

その背後にある理由と、それを回避するために何をすべきかを教えてください。

    <script type="text/javascript">

      function TextBox1_TextChanged() {
       <%
           Session["HitCount1"] = TextBox1.Text ;
       %>

     }

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

    </script>

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

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

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

                  if ((x.Equals(null)) || (x.Equals("")))
                 { 
                     // Session Variable is either empty or null .
                 } 
                 else 
                 {
                     TextBox1.Text = Session["HitCount1"].ToString();
                 }
          %>

  </form>
</body>

    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);
        }


    }
4

1 に答える 1

0

インラインのサーバー側コードとコード ビハインド コードを組み合わせることは、通常はお勧めできません。コード ビハインド コードのみを使用することをお勧めします。

このコード:

  function TextBox1_TextChanged() {
   <%
       Session["HitCount1"] = TextBox1.Text ;
   %>

 }

... (サーバー側) セッション エントリ "HitCount1" が に設定される効果はありません。Textbox1.TextこれTextBox1_TextChangedは、クライアント側関数であり、割り当てステートメントがサーバー側で発生するためです。実行時に、サーバー コードのチャンクはコンパイラによって削除されるためTextBox1_TextChanged、空の関数になります。

経験則: クライアントで発生するか、ポストバック時にサーバーで発生するか、または Ajax 呼び出しを介してサーバーで発生します。クライアント コードとサーバー コードを混在させることはできません。

私の推奨事項: コード ビハインドですべてを行うように切り替えます。機能しているときに、ポストバックが多すぎる場合は、Ajax 呼び出しを調査します。

于 2013-03-24T11:33:54.307 に答える