c# - 如何使用__doPostBack()




javascript asp.net (5)

以下是关于__doPostBack()如何工作的简要教程

说实话,我用得不多; 至少直接。 许多服务器控件(例如ButtonLinkButtonImageButtonGridView某些部分等)使用__doPostBack作为回发机制。

我试图在ASP.NET中使用__doPostBack()创建一个异步回发,但我不知道如何去做。 我想使用香草JavaScript。

简单的点击按钮可能会导致__doPostBack()事件触发。 我只是想了解机制如何运作。


我只想为asp:button添加一些内容到这个帖子。 我试过clientId,它似乎不适合我:

__doPostBack('<%= btn.ClientID%>', '');

但是,获取UniqueId似乎回发到服务器,如下所示:

__doPostBack('<%= btn.UniqueID%>', '');

这可能会在未来帮助其他人,因此发布此信息。


这也是获得服务器端控件在FancyBox和/或jQuery对话框中回发的好方法。 例如,在FancyBox-div中:

   <asp:Button OnClientClick="testMe('param1');" ClientIDMode="Static"  ID="MyButton"  runat="server" Text="Ok" >
</asp:Button>

JavaScript的:

function testMe(params) {
    var btnID= '<%=MyButton.ClientID %>';          
    __doPostBack(btnID, params);
}

服务器端Page_Load:

 string parameter = Request["__EVENTARGUMENT"];
 if (parameter == "param1")
     MyButton_Click(sender, e);

您可以使用名为btnSave的按钮在Web窗体中尝试此操作,例如:

<input type="button" id="btnSave" onclick="javascript:SaveWithParameter('Hello Michael')" value="click me"/>

<script type="text/javascript">
function SaveWithParameter(parameter)
{
  __doPostBack('btnSave', parameter)
}
</script>

并且在你的代码中添加这样的内容来读取值并对其进行操作:

public void Page_Load(object sender, EventArgs e)
{
  string parameter = Request["__EVENTARGUMENT"]; // parameter
  // Request["__EVENTTARGET"]; // btnSave
}

试一试,让我们知道如果这对你有用。


使用document.activeElement存在潜在的问题。 考虑:

<div contentEditable="true">
  <div>Some text</div>
  <div>Some text</div>
  <div>Some text</div>
</div>

如果用户关注内部d​​iv,则document.activeElement仍然引用外部div。 您不能使用document.activeElement来确定哪个内部div具有焦点。

下面的函数解决这个问题,并返回焦点节点:

function active_node(){
  return window.getSelection().anchorNode;
}

如果您希望获得焦点元素,请使用:

function active_element(){
  var anchor = window.getSelection().anchorNode;
  if(anchor.nodeType == 3){
        return anchor.parentNode;
  }else if(anchor.nodeType == 1){
        return anchor;
  }
}




c# javascript asp.net postback