2012-04-10 59 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屬性爲你的行動方法。似乎是不安全的,但應該工作,現在不能測試它。