我的强类型视图中有一个 TextArea 定义为
@Html.TextAreaFor(x => x.Text)
我的控制器操作最初看起来与此类似:
[HttpPost]
public ViewResult Index(MyViewModel vm)
{
using (var db = new MyEntities())
{
Post p = new Post();
p.Text = vm.Text;
db.Posts.AddObject(p);
db.SaveChanges();
}
return View();
}
这很好用。用户在 TextArea 中输入的文本被传递到控制器中,并通过实体框架保存到 SQL Server 中的 Post 表中。该字段的数据类型为 varchar(1000)。 (还使用带有 [StringLength(1000)] 验证的 MetadataType 对文本字段进行模型验证。)
我注意到,如果我尝试复制一些 HTML 源代码并将其粘贴到 TextArea 中并提交,则会收到以下错误:
“从客户端检测到潜在危险的 Request.Form 值”
这个错误导致我这个问题 https://stackoverflow.com/questions/81991/a-potentially-dangerous-request-form-value-was-detected-from-the-client,从中得到的好处是我可以简单地添加
[HttpPost, ValidateInput(false)]
到我的操作来停止这种类型的验证。这非常有效,但令我惊讶的是,无论我尝试将什么内容放入 TextArea,都不会造成任何问题。如果我粘贴充满引号字符的 javascript、html 或 T-SQL 语句,它仍然可以正常工作。我看到我输入到 TextArea 中的确切字符出现在 SQL 表中,如果我将文本显示回视图,我会在源代码中看到每个字符都转换为 HTML 对应项,并且屏幕上的显示看起来就像当我输入它时它就完成了。我没有进行任何类型的文本转换来完成此操作。默认情况下,一切似乎都按照我想要的方式运行。我当然对此感到高兴,但是当我读到有关禁用验证的内容时,通常会出现警告,表明您应该了解这样做的后果,但我认为我没有这样做。所以我想知道,后果是什么?是否有人可能在我的 TextArea 中输入任何内容,从而因禁用输入验证而导致混乱?
如果相关的话,我的特定设置是 MVC4、.NET 4.0、Entity Framework 4.4、SQL Server 2012 Express。