2012-04-10 26 views
1

我在MVC3项目中有一个表单。我的一个输入字段应该接受HTML。不幸的是,我不能拥有这个值映射到的ViewModel。该字段自动生成并自动读入。我收到以下错误。MVC3,关闭不在视图模型中的字段的字段验证

A potentially dangerous Request.Form value was detected from the client 

由于没有viewmodel,我不能应用[AllowHTML]属性。有谁知道一个解决方法,不涉及禁用整个页面的验证?

谢谢

附加信息: 我可以通过以下操作访问未经验证的值:

using System.Web.WebPages; 
using System.Web.Helpers; 

    .....Inside Controller.... 
    string value = Request.Unvalidated("input-40"); 

现在的问题是,Request.Params集合抛出异常。我想访问所有其他值,并验证它们...只是不是那个。有没有办法让我明确验证其他字段或访问验证的集合。

下就可以了

string value = System.Web.Something.ValidateInput(Request.Unvalidated("input-41")); 

不幸的是,我不知道在哪里/如果此方法存在

+0

如果这是行为的一个参数,我认为你可以使用AllowHTML来修饰参数,虽然我不积极。 – 2012-04-10 22:12:48

+1

我认为你可以使用[ValidateInputAttribute](http://msdn.microsoft.com/en-us/library/system.web.mvc.validateinputattribute.aspx)来修饰操作,但这会影响整个表单集合。 – 2012-04-10 22:14:04

+0

如果我可以弄清楚如何手动调用其他字段值的验证,那么修饰操作就没有问题。有任何想法吗?我会找一些像System.Web.ValidateInput(Request.Params [“input-name”]) – AFrieze 2012-04-10 22:32:14

回答

2

你可以尝试ValidateInput(false)属性:

[ValidateInput(false)] 
public ActionResult YourAction(FormCollection yourCollection) 
{ 
    // your stuff 
} 
+0

这将关闭全部验证形式值。如果有方法可以手动调用每个值的验证方法,那么这很好。在那儿? – AFrieze 2012-04-10 22:27:34

+0

嗯,取决于你如何将你的viewmodel/values传递给动作。这些是你的选择:[链接](http://weblogs.asp.net/imranbaloch/archive/2011/02/19/understanding-request-validation-in-asp-net-mvc-3.aspx),但你可能无法找到你的后:( – veblock 2012-04-10 23:01:11

0

使用ValidateInput属性为你的行动方法。似乎是不安全的,但应该工作,现在不能测试它。