2009-04-30 92 views
33

我正在使用vb.net将使用webforms创建的应用程序转换为asp.net mvc框架。我的一个观点存在问题。当我提交表格时,我收到了一个黄色的死亡屏幕,上面写着“客户端发现了潜在危险的Request.Form值”。我使用tinymce作为我的RTE。我曾认为自己设定为什么ValidateInput(False)不起作用?

ValidateRequest =“假”

我知道在MVC它不尊重它从我至今读的看法。所以我也把它放在控制器上。我曾尝试不同的设置:

<ValidateInput(False), AcceptVerbs(HttpVerbs.Post)> _ 

......还有......

<AcceptVerbs(HttpVerbs.Post), ValidateInput(False)> _ 

......像这样,以及...

<ValidateInput(False)> _ 
<AcceptVerbs(HttpVerbs.Post)> _ 

只是为了看它是否有所作为,但我仍然得到了死亡的黄色屏幕。我只想将它设置为该视图以及我的控制器中我的帖子所属的特定操作。我错过了什么吗?

回答

17

您确定发布的控制器操作是您拥有该属性的控制器操作?

+0

你是一个拯救生命的人!我昨天在这个项目上烧了自己。自从昨晚以来,这一直在困扰着我,我认为在这上面睡觉会有所帮助。但是,是的,我的表单操作对我来说是空的,我在那个视图上测试了我的jQuery验证,并且忘记了把Url.Action放回去。我感到尴尬大声笑。 – Nurvx 2009-04-30 16:22:05

+16

我们都是错误,没有他们没有人会学习。 :) – 2009-04-30 16:27:38

+0

在我的情况下,我有一个方法,既接收完整的模型和一些额外的参数(如`保存(SomeModel模型,字符串inputFromMemo)`)。首先我编写了`Save(SomeModel模型)`。添加其他参数固定它。 – 2016-03-13 08:31:25

130

使用asp.net 4,您还需要在web.config中配置验证模式。

设置以下作为<system.web>元素的子元素:

<system.Web> 
    ... 
    <httpRuntime requestValidationMode="2.0"/>  

Asp.Net 4默认设置requestValidationMode到4.0,它告诉系统中的HTTP请求的BeginRequst阶段之前执行请求验证。验证将在系统到达action属性之前发生,告诉它不要验证请求,从而使该属性无效。设置requestValidationMode =“2.0”将恢复到asp.net 2.0请求验证行为,允许ValidateInput属性按预期工作。

+17

这是MVC 3的'固定'吗? – 2010-04-20 03:42:34

3

当您使用它们实现IModelBinder界面,你会发现,这些自定义模型粘合剂总是验证数据,无论任何属性自己的模型粘合剂。 您可以添加几行代码,以使自定义模型粘合剂尊重行动ValidateInput过滤器:

 // First check if request validation is required 
     var shouldPerformRequestValidation = controllerContext.Controller.ValidateRequest && bindingContext.ModelMetadata.RequestValidationEnabled; 

     // Get value 
     var valueProviderResult = bindingContext.GetValueFromValueProvider(shouldPerformRequestValidation); 
     if (valueProviderResult != null) 
     { 
      var theValue = valueProviderResult.AttemptedValue; 

      // etc... 
     } 

这是由马亭博兰这里非常漂亮解释说:http://blogs.taiga.nl/martijn/2011/09/29/custom-model-binders-and-request-validation/

0

添加以下行代码:

GlobalFilters.Filters.Add(new ValidateInputAttribute(false)); 

到Application_Start()方法。

1

可以尝试访问像 HttpContext.Request.Unvalidated.Form [“字段名”]

0

领域如果您使用的输入模式,你想要的属性使用AllowHtml,你会畅通。

public class InputModel 
{ 
    [AllowHtml] 
    public string HtmlInput { get; set; } 
} 

... 
[ValidateInput(false)] 
public async Task<ActionResult> ControllerMethod(InputModel model) 
{ 
} 
相关问题