使用__doPostBack从JavaScript调用ASP.NET TextChanged事件(I

2019-08-03 13:13发布

和许多人一样,我试图调用从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。

谁能告诉我还有什么我需要做什么?

Answer 1:

我已经试过这一点,它为我工作:

<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没有改变。



Answer 2:

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的例子。



文章来源: Invoke ASP.NET TextChanged event from JavaScript using __doPostBack