我有一个显示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>
<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);
}
但是这种方法没有被触发。有人可以帮我识别我正在做的错误。
答案 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>
但是,通过更改txtName
中selectedItem
的文字也不会触发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;
}