Ant*_*t P 0 c# asp.net webforms
我有一个用户控件,我在代码隐藏中成功设置Page.EnableEventValidation = false了Page_Init事件(为了将页面标记呈现为字符串):
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;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在单独的页面上复制此功能时(这次是在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>
Run Code Online (Sandbox Code Playgroud)
...我收到以下错误:
'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);
}
Run Code Online (Sandbox Code Playgroud)
这将注册事件参考并允许事件触发.然后你可以离开Page.EnableEventValidation = true.
从MSDN 检查此示例.
| 归档时间: |
|
| 查看次数: |
5258 次 |
| 最近记录: |