webform_DoPostBackWithOptions()有什么作用?

时间:2013-12-10 16:11:41

标签: javascript asp.net

我有一个按钮声明如下:

<asp:Button id=Send runat="server" EnableViewState="False" 
ToolTip="Email me this report" CssClass="Button" Text="Email me this report">
</asp:Button>

但如果我在浏览器中检查元素,它会显示如下:

<input type="submit" class="Button" title="Email me this report" 
id="ctl03_Toolbar_Send" onclick="javascript:WebForm_DoPostBackWithOptions(new 
WebForm_PostBackOptions("ctl03$Toolbar$Send","", true, "", "";, false, false))" 
value="Email me this report" name="ctl03$Toolbar$Send">

我想知道onclick事件的来源是什么?它做了什么?

提前感谢您的帮助。

4 个答案:

答案 0 :(得分:7)

了解在呈现的HTML中没有“ASP.NET控件”这样的东西,Web服务器响应用户的请求而输出。所有ASP.NET控件都会以一种方式呈现一些HTML,使一切在服务器上按预期工作。 Button控件正在发出“onclick”属性,以便触发一些JavaScript,这些JavaScript将导致表单数据被发布回服务器(假设任何客户端验证器都不会阻止它)。

正如我刚才提到的,使用此方法发回数据的原因是为任何客户端脚本提供先运行的机会,例如可以检查并查看是否有任何必填字段的数据验证控件填写完毕。

基本上,除非您希望创建自己的ASP.NET服务器控件,否则您无需担心太多确切地知道什么是IIS的最终响应。熟悉正在发生的事情是很好的(我当然不是说你不应该确切地了解服务器控制如何做他们的事情),但是你不必非常熟悉每个客户端调用和参数。 ASP.NET正在制定中,以便开始使用。

答案 1 :(得分:6)

如果为Button服务器控件设置PostBackUrl属性,则表示它是跨页面发布,然后asp.net框架而不是普通的__DoPostBack()添加“WebForm_DoPostBackWithOptions”。检查是否为此按钮设置了“PostBackUrl”属性。

<asp:Button id=Send runat="server" EnableViewState="False" PostBackUrl="~/Page2.aspx"
ToolTip="Email me this report" CssClass="Button" Text="Email me this report">
</asp:Button>

如果在你的情况下你没有设置“PostBackUrl”,那么ASP.NET框架也默认不为Button Control添加它,所以这意味着必须有另一个控件设置OnClick属性值可能使用以下服务器旁边代码 -

    PostBackOptions myPostBackOptions = new PostBackOptions(this);
    myPostBackOptions.ActionUrl = "Page2.aspx";
    myPostBackOptions.AutoPostBack = false;
    myPostBackOptions.RequiresJavaScriptProtocol = true;
    myPostBackOptions.PerformValidation = true;

    // Add the client-side script to the HyperLink1 control.
    Button1.OnClientClick = Page.ClientScript.GetPostBackEventReference(myPostBackOptions);

答案 2 :(得分:0)

删除“EnableViewState =”False“,它应该使用默认的PostBack。

当您将按钮设置为不存储状态时,它将使用此选项,而不是在页面上以不同方式连接到page_load javascript事件。

答案 3 :(得分:0)

此外,如果页面上有一些验证控件,也可能会导致它。将按钮的CausesValidation属性设置为false。

     <asp:button runat="server" ID="test" CausesValidation ="false" />