2009-04-30 89 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) 
{ 
} 
相關問題