在UpdatePanel部分回发后,我无法从输入中读取服务器端设置值
这是我可以用来重现这个问题的最简单的例子:
<asp:ScriptManager runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Panel ID="pnlSrc" runat="server">
<asp:TextBox ID="txtInput" runat="server" AutoPostBack="true"
OnTextChanged="txtInput_TextChanged"></asp:TextBox>
</asp:Panel>
<asp:Panel ID="pnlDst" runat="server">
<asp:TextBox ID="txtOutput" runat="server" />
<a id="lnkTest" href="#" onclick="pageLoad();">check txtOutput</a>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
<script type="text/javascript">
var txtOutput = $('#<%=txtOutput.ClientID%>');
function pageLoad() {
var exe = $(txtOutput).text();
alert(exe);
}
</script>
服务器端,我只是将txtInput文本反转到txtOutput:
protected void txtInput_TextChanged(object sender, EventArgs e)
{
var txt = string.Empty;
for (int i = txtInput.Text.Length - 1; i >= 0; i--)
{
txt += txtInput.Text[i];
}
txtOutput.Text = txt;
}
客户端,pageLoad()在每次部分回发后执行,但txtOutput值永远不会更新:它总是与第一次加载相同(在这种情况下为空)
我也尝试过getInstance()。add_endRequest但没有成功
我希望&#39; exe&#39;包含txtOutput.Text的实际值,设置服务器端,但不是这样
单击lnkTest,调用具有预期结果的相同函数
对不起,如果我做错了,这是我的第一篇文章
谢谢
答案 0 :(得分:0)
我看到了几个问题。
首先,您正在执行两次jQuery选择器。一旦设置了var txtOutput,然后在设置exe时再次在pageLoad方法中。你只需要一个。下面的例子消除了第二个例子 - 你可以采用另一种方式,让txtOutput只是控件ID而不是实际控制对象。
其次,您需要引用所选对象的第一个元素的值。
<script type="text/javascript">
var txtOutput = $('#<%=txtOutput.ClientID%>');
function pageLoad() {
var exe = txtOutput[0].value;
alert(exe);
}
</script>
答案 1 :(得分:0)
你的脚本应该是这样的
<script type="text/javascript">
function pageLoad() {
alert($('#txtOutput').val());
}
</script>
答案 2 :(得分:0)
@Karthik Ganesan让我朝着正确的方向前进,为了方便他人,我会报告最终的代码
function pageLoad() {
var txtOutput = $('#<%=txtOutput.ClientID%>');
var exe = $(txtOutput).val();
alert(exe);
}
只有var txtOutput = $('#<%=txtOutput.ClientID%>')
当然,您可以使用静态选择器,例如&#39; #txtOutput&#39;,具体取决于clientIdMode和fx版本,并将其删除