和许多人一样,我试图调用从JavaScript .NET控件的服务器端事件。
具体而言,我想火的TextChanged
具名的TextBox事件txtSearch
。 因此,我期待达到从客户端以下事件:
protected void txtSearch_TextChanged(object sender, EventArgs e)
(例如,具有对SO看了很多答案在这里和这里 ),我有以下的JavaScript:
__doPostBack('ctl00$ctl00$Container$Main$txtSearch', 'TextChanged');
但是服务器端事件永远不会触发。
我试过无数的排列:与将AutoPostBack真假,有和没有的ASPX服务器端的指令声明的事件( 即 OnTextChanged =“”),与EventValidation在页声明关闭,使用ClientID的而不是的UniqueID在EVENTTARGET参数...但事件仍然从来没有发射。
一对夫妇的其他点
- 所述
txtSearch
按钮控制也是一个UpdatePanel触发,在该情况下,重要的。 - 我将现有的代码,其中有相当多,并正在寻找的东西,我可以拖放到每个页面,而不是转换代码隐藏事件PageMethods。
谁能告诉我还有什么我需要做什么?
我已经试过这一点,它为我工作:
<asp:TextBox runat="server" ID="txtSearch" OnTextChanged="txtSearch_TextChanged"></asp:TextBox>
<input type="button" value="submit" onclick="<%= GetOnChangedScript() %>" />
服务器端asp:TextBox
,并在客户端input
的时候触发__doPostBack
上点击。 该__doPostBack
脚本通过产生PostBackOptions
:
protected string GetOnChangedScript()
{
var options = new PostBackOptions(txtSearch, string.Empty);
options.AutoPostBack = true;
options.RequiresJavaScriptProtocol = true;
var script = Page.ClientScript.GetPostBackEventReference(options);
return script;
}
该txtSearch_TextChanged
在文本框中的值更改事件处理程序便会启动,并submit
按钮被点击。
但要注意,对于像控制TextBox
的文本存储在视图状态; 由用户存储的表单数据输入的新文本。 当TextBox
加载视图状态数据,它得到了旧值。 这是用自带的形式新的值进行比较。 如果值不同, TextChanged
事件。 如果没有,事件处理程序不会被解雇。 这是原因Page_Load
事件被解雇(回发发生),但txtSearch_TextChanged
不火因的价值TextBox
没有改变。
function initTxtBox(){ $('#<%=txtBox.ClientID%>').on('keyup change', function() {setTimeout('txtpostback()', 0); return false;});}
function txtpostback(){__doPostBack('" + txtCadastreNumber.UniqueID + @"','');
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(initTxtBox);
设置auotpostback属性设置为false为您txtbox和AutoEventWireup =“真”为你的控制或页面声明。 OnTextChanged事件服务器端也能工作。 如果你没有在项目中使用jQuery的,让我知道,我用给你不jQuery的一些JavaScript的例子。