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



与其他许多控件一样,我正在尝试从JavaScript调用.NET控件的服务器端事件。

具体来说,我想在名为txtSearch的TextBox上激发TextChanged事件。因此,我希望从客户端到达以下事件:

protected void txtSearch_TextChanged(object sender, EventArgs e)

在阅读了许多关于SO的答案后(例如这里和这里),我有以下JavaScript:

__doPostBack('ctl00$ctl00$Container$Main$txtSearch', 'TextChanged');

但是服务器端事件永远不会触发。

我尝试了许多排列:AutoPostBack为true和false,有和没有ASPX服务器端指令中声明的事件(OnTextChanged="),在页面声明中关闭EventValidation,在EVENTTARGET参数中使用ClientID而不是UniqueID。。。但该活动仍然从未启动。

的其他几个点

  • 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;
}

当文本框的值发生更改并单击submit按钮时,txtSearch_TextChanged事件处理程序将触发。

但请注意,对于像TextBox这样的控件,文本存储在视图状态中;用户输入的新文本存储在表单数据中。当TextBox加载视图状态数据时,它将获得旧值。将其与表单中的新值进行比较。如果值不同,则会触发TextChanged事件。如果否,则不会触发事件处理程序。这就是Page_Load事件被激发(发生回发)的原因,但由于TextBox的值没有更改,txtSearch_TextChanged没有被激发。

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);

将txtbox的auotpostback属性设置为false,将控件或页面声明的AutoEventWireup="true"。OnTextChanged事件服务器端也将工作。如果你的项目中没有使用jquery,请告诉我,我会给你一些没有使用jquery的javascript示例。

相关内容

  • 没有找到相关文章

最新更新