【问题标题】:Unable to trigger the code-behind (aspx.cs) method from aspx page using update panel无法使用更新面板从 aspx 页面触发代码隐藏 (aspx.cs) 方法
【发布时间】:2018-07-28 18:40:48
【问题描述】:

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

现在,为了传递所选值,我添加了一个文本框,用于复制所选城市名称值并将其包含在更新面板中。当文本框选择发生变化时,想法是触发代码隐藏方法:

这是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);
    }

但是这个方法没有被触发。有人可以帮我找出我正在做的错误。

【问题讨论】:

    标签: c# jquery asp.net textbox updatepanel


    【解决方案1】:

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

    下一项是:$('#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>
    

    但是,也不会通过将 txtName 中的文本更改为 selectedItem 来触发 PostBack。文本框需要失去焦点/模糊本身才能触发 PostBack。因此,要么将 txtName 放入 UpdatePanel 并在其上放置 TextChanged 事件,要么从 selectedItem 中删除 TextChanged,在 UpdatePanel 中放置一个 Button 并使用 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;
    }
    

    【讨论】:

    • 我无法放置按钮,当我单击自动完成文本框中的值时,它必须显示一个网格视图。我怎样才能在不使用按钮的情况下实现这一点?请协助。
    • 可以用css隐藏按钮。你的问题是当selectedItem文本用jQuery改变时TextChanged事件不会触发,所以如果你不触发某些东西,后面的代码永远不会到达。
    猜你喜欢
    • 1970-01-01
    • 2011-11-12
    • 2012-09-27
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多