在updatePanel部分回发后,客户端pageLoad没有获得新的输入值

时间:2014-06-11 14:50:19

标签: c# javascript asp.net ajax

在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,调用具有预期结果的相同函数

对不起,如果我做错了,这是我的第一篇文章

谢谢

3 个答案:

答案 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%>') 中的,即使在ajax的生命周期中调用它也能正常工作;尽管

,我仍然不明白为什么

当然,您可以使用静态选择器,例如&#39; #txtOutput&#39;,具体取决于clientIdMode和fx版本,并将其删除