webform_DoPostBackWithOptions()有什么作用?

Joy*_*yin 21 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>
Run Code Online (Sandbox Code Playgroud)

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

<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">
Run Code Online (Sandbox Code Playgroud)

我想知道onclick事件的来源是什么?它有什么作用?

感谢您的帮助.

Bha*_*a K 8

如果为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>
Run Code Online (Sandbox Code Playgroud)

如果在你的情况下你没有设置"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);
Run Code Online (Sandbox Code Playgroud)

  • 在我的例子中,问题来自一个asp.net验证器,其EnableClientScript属性设置为"true"; 将其设置为"false"解决了问题. (2认同)

Mik*_*e U 7

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

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

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