Вызов ClientScript не сохраняет значение в элементах управления веб-страницы

У меня небольшая проблема. Если страница обновляется с помощью 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);
        }


    }

1 ответ

Объединение встроенного кода на стороне сервера и кода на основе кода, как правило, является плохой идеей. Я бы порекомендовал просто использовать код с выделенным кодом.

Этот код:

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

 }

... не приведет к тому, что для записи сеанса (на стороне сервера) "HitCount1" будет установлено значение Textbox1.Text, так как TextBox1_TextChanged является функцией на стороне клиента, и ваш оператор присваивания будет происходить на стороне сервера. Во время выполнения часть кода сервера будет удалена компилятором, поэтому TextBox1_TextChanged будет пустой функцией.

Основное правило: что-то происходит на клиенте, или происходит на сервере при обратной передаче, или происходит на сервере через Ajax-вызовы. Вы не можете смешивать код клиента и сервера вместе.

Моя рекомендация: переключиться на выполнение всего кода. Если у вас это работает, если у вас слишком много постбэков, исследуйте Ajax-вызовы.

Другие вопросы по тегам