Вызов 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-вызовы.