我有一个按钮声明如下:
<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事件的来源是什么?它做了什么?
提前感谢您的帮助。
答案 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" />