我有一个GridView,我需要更新一些插入HTML CODE的数据;我需要根据请求对这些数据进行编码和解码。
我不能以任何方式禁用全局“请求验证”,甚至不能在页面级别禁用,因此我需要一个解决方案来禁用“控制级别”的“请求验证”。
目前我正在使用一个脚本,它应该Html.Encode每个值都在更新,但似乎“请求验证”在事件RowUpdating之前启动它的工作,所以我得到错误“Page A有潜在危险的Request.Form .. 。“。
知道怎么解决吗?
由于
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
foreach (DictionaryEntry entry in e.NewValues)
{
e.NewValues[entry.Key] = Server.HtmlEncode(entry.Value.ToString());
}
PS我使用Wweb控件而不是MVC
答案 0 :(得分:1)
使用方法RegisterOnSubmitStatement注册脚本,该脚本将在提交和解码服务器端的这些字段的值之前对所有输入字段的值进行编码。
string script = String.Format("var inputs = $get('{0}').getElementsByTagName('input');" +
"for(var i = 0; i < inputs.length; i++) " +
"inputs[i].value = encodeURIComponent(inputs[i].value);", this.ClientID);
Page.ClientScript.RegisterOnSubmitStatement(this.GetType(), "onsubmit", script);
答案 1 :(得分:1)
对于简单文本框或隐藏字段控件,如果控件的ID以__(两个下划线)开头,则会跳过这些控件的请求验证。我使用它来检测我的整个页面和网站,但绕过一个控件。然而,这不是一种正式的方式,因此可能会在将来的.net版本中进行更改。