0

我有一个小问题。如果使用 F5 刷新页面,TextBox 应保留其旧值。在 Page_Load() 中,如果我保持 // Loading(); 然后 TextBox1 保留其旧值。
一旦我删除评论,它就会在 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 回答