无法使用更新面板从 aspx 页面触发代码隐藏 (aspx.cs) 方法
Posted
技术标签:
【中文标题】无法使用更新面板从 aspx 页面触发代码隐藏 (aspx.cs) 方法【英文标题】:Unable to trigger the code-behind (aspx.cs) method from aspx page using update panel 【发布时间】: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>
<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】:首先,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事件不会触发,所以如果你不触发某些东西,后面的代码永远不会到达。以上是关于无法使用更新面板从 aspx 页面触发代码隐藏 (aspx.cs) 方法的主要内容,如果未能解决你的问题,请参考以下文章