设置页面.在Page_Init上启用eventvalidation
本文关键字:Init 启用 eventvalidation Page 设置 | 更新日期: 2023-09-27 18:10:31
我有一个用户控件,我已经成功地在代码隐藏的Page_Init
事件中设置了Page.EnableEventValidation = false
(为了将页面标记呈现为字符串):
MyControl.ascx.cs
protected void Page_Init(object sender, EventArgs e)
{
if (Request.Form["__EVENTTARGET"] != null
&& Request.Form["__EVENTTARGET"] == btnPrint.ClientID.Replace("_", "$"))
{
Page.EnableEventValidation = false;
}
}
然而,当我试图在单独的页面上复制此功能时(这次在runat=server
脚本标签中)…
MyPage.aspx
<script runat="server">
protected void Page_Init(object sender, EventArgs e)
{
if (Request.Form["__EVENTTARGET"] != null
&& Request.Form["__EVENTTARGET"] ==
btnDownloadPDF.ClientID.Replace("_", "$"))
{
Page.EnableEventValidation = false;
}
}
</script>
…我得到以下错误:
'EnableEventValidation'属性只能在页面中设置指令或配置部分。
现在,在我的第一个例子中,当我最初试图在Page_Load
上这样做时,我收到了这个错误;然而,似乎你可以禁用事件验证编程只要它是在(或之前)Page_Init
期间完成的。不幸的是,在我的第二个例子中,同样的方法不起作用。
为什么这在一种情况下有效而在另一种情况下无效?它是否与代码不在代码隐藏中的事实有关?
出于安全原因,通常使用Page.EnableEventValidation = false
是一个坏主意。
你应该看看Page.ClientScript.RegisterForEventValidation
protected override void Render(HtmlTextWriter writer)
{
Page.ClientScript.RegisterForEventValidation(btnDownloadPDF.UniqueID);
base.Render(writer);
}
这将注册事件引用并允许事件触发。然后你可以留下Page.EnableEventValidation = true
。
从MSDN查看此示例