65.9K
CodeProject 正在变化。 阅读更多。
Home

__doPostBack 函数

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.57/5 (17投票s)

2013 年 10 月 11 日

CPOL

2分钟阅读

viewsIcon

273051

大家好。今天我将讨论 __doPostBack 函数,因为在使用 _dopostback 时存在一些混淆。你可以看到这一点

大家好。

今天我将讨论 __doPostBack 函数,因为在使用这个函数时存在一些混淆。
你可以在 ASP.NET 生成的 HTML 代码中看到这个 __doPostBack 函数。

该函数接受以下两个参数: 

eventTarget  - 这包含导致回发控件的 ID。
eventArgument
- 这包含与控件关联的任何附加数据。

在任何 ASP.NET 页面中,都会自动声明两个隐藏字段:__EVENTTARGET__EVENTARGUMENT 。当页面回发到服务器时,ASP.NET 会检查 __EVENTTARGET__EVENTARGUMENT 的值,从而确定哪个控件导致页面回发以及需要处理的事件。

eventTargeteventArgument 参数的值存储在隐藏字段中。可以使用表单或参数集合从代码隐藏文件中访问这两个隐藏变量。

如果我们检查 __doPostBack 函数的代码,我们可以看到它首先使用传递给函数的两个参数设置两个隐藏字段的值。之后,页面将提交回服务器。导致回发的控件的 ID 存储在 __EVENTTARGET 隐藏字段中,因此你可以找到导致回发的控件。

<a id="LinkButton1" href="javascript:__doPostBack( 'LButton3','' )">LinkButton</a>

你可以在 href 中看到函数调用 __doPostBack('LButton3',''),传递给 eventTarget 的参数是“LButton3”,这是链接按钮控件(EventSource)的 ID

示例

  1. 在表单内添加两个隐藏字段。
    <input type =hidden name ="__EVENTTARGET" value ="">
    <input type =hidden name ="__EVENTARGUMENT" value =""> 
    
  2. 在 Head 标签下添加 javascript。
    <script>
    function __doPostBack( eventTarget, eventArgument )
    {
        document.Form1.__EVENTTARGET.value = eventTarget;
        document.Form1.__EVENTARGUMENT.value = eventArgument;
        document.Form1.submit();
    }
    </script>  
    
  3. 添加两个控件。
    <a id="LButton3" href="javascript:__doPostBack('Button2','')">LinkButton</a>
    <asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="Button" />
    
  4. 在你的 cs 页面中添加函数。
    protected void Button2_Click(object sender, EventArgs e)
    {
        Response.Write("Welcome to  Student Academic Blog");
    }
    
  5. 你还需要在代码隐藏文件中添加一些代码来捕获回发并触发事件。在 PageLoad 方法中添加。
    if (Request.Form["__EVENTTARGET"] == "Button2")
    {
        // Fire event
        Button2_Click( this, new EventArgs( ) );
    }
    这将捕获发布的变量 __EVENTTARGET 并使其触发事件“Button2_Click”。如果需要将内容传递到代码隐藏文件,你还可以将事件参数与目标一起传递。
    __doPostBack( "Button2', '<event argument here>' ) 

    这将在代码隐藏文件中作为 Request.Form["__EVENTARGUEMENT"] 捕获

所以这就是你可以使用 __doPostBack 的方法

享受吧

© . All rights reserved.