无法使用更新面板从aspx页面触发代码隐藏(aspx.cs)方法

时间:2018-02-18 10:43:18

标签: c# jquery asp.net textbox updatepanel

我有一个显示Citynames的自动填充文本框。每当用户点击城市名称时,所选城市名称就会显示在文本框中。此文本框值应发送到代码隐藏方法(aspx.cs),以获取所选城市名称的更多详细信息,以便生成的详细信息显示在网格视图中。

现在,为了传递所选值,我添加了一个文本框,该文本框复制了所选的cityname值并将其包含在更新面板中。当文本框选择改变时,想法是触发代码隐藏方法:

这是aspx页面中的代码:

      $(document).ready(function () {
            $('#txtName').on('change', function () {
                $('#selectedItem').html(this.value);
            }).change();
            $('#txtName').on('autocompleteselect', function (e, ui) {
                $('#selectedItem').val(ui.item.value);
            });
        });


 <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server">
        </asp:ScriptManager>
        <label>Alternate Names: </label>
        <asp:TextBox ID="txtName" runat="server"></asp:TextBox>
        &nbsp;
            <asp:Label ID="countLabel" runat="server"></asp:Label>
        <br />
        <asp:UpdatePanel ID="updatePanel1" runat="server">
            <ContentTemplate>
                <asp:TextBox ID="selectedItem" runat="server" OnTextChanged="selectedItem_TextChanged"></asp:TextBox>
            </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="selectedItem" EventName="TextChanged" />
            </Triggers>
        </asp:UpdatePanel>
    </form>

这是aspx.cs页面中的代码:

    protected void selectedItem_TextChanged(object sender, EventArgs e)
    {
        MessageBox.Show(selectedItem.Text);
    }

但是这种方法没有被触发。有人可以帮我识别我正在做的错误。

1 个答案:

答案 0 :(得分:1)

首先,MessageBox.Show不是WEBforms代码,而是WINforms。你不应该将它们混合在一起。如果您想在网页上显示结果,请使用javascript警告或模态。

下一项是:$('#selectedItem').html(this.value);。它应与val()

一起使用
  $('#selectedItem').val(this.value);

如果你想在TextChange上触发PostBack,请使用AutoPostBack=true

<asp:TextBox ID="selectedItem"  ClientIDMode="Static" runat="server" 
   OnTextChanged="selectedItem_TextChanged" AutoPostBack="true"></asp:TextBox>

但是,通过更改txtNameselectedItem的文字也不会触发PostBack。文本框需要失去焦点/模糊本身才能触发PostBack。因此,要么只是将txtName放在UpdatePanel中并将TextChanged事件放在其上,要么从selectedItem中删除TextChanged,将一个Button放在UpdatePanel中并使用jQuery单击它。

<asp:UpdatePanel ID="updatePanel1" runat="server">
    <ContentTemplate>

        <asp:TextBox ID="selectedItem" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
        <asp:Label ID="showResults" runat="server" Text=""></asp:Label>

    </ContentTemplate>
</asp:UpdatePanel>

<script type="text/javascript">
    $(document).ready(function () {
        $('#txtName').on('change', function () {
            $('#selectedItem').val(this.value);
            $('#Button1').click();
        });
    });
</script>

然后在代码背后

protected void Button1_Click(object sender, EventArgs e)
{
    showResults.Text = selectedItem.Text;
}