2011-10-08 77 views
0

我有一個控制器,我不想驗證,當被調用時。ValidateInput(false)仍然觸發在IValidatableObject中的驗證

我的控制器:

[Authorize(Roles = "Admin")] 
[HttpPost] 
[ValidateInput(false)] 
public ActionResult Delete(MyLINQClass model) 
{ 
    // Do something 
} 

我的模型:

[MetadataType(typeof(MyLINQClass MetaData))] 
public partial class MyLINQClass : DefaultModel, IValidatableObject 
{ 
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     // Do validation 
    } 
} 

我不希望驗證被觸發,我想加入[ValidateInput(false)]會有所幫助。但Validate()仍然被觸發。

im使用ASP MVC 3和.NET 4.

回答

1

[ValidateInput(false)]是不相關的模型驗證。它禁用請求中的XSS字符的ASP.NET驗證,例如<,>,...驗證是在默認模型綁定器嘗試綁定MyViewModel參數時觸發的。如果您不想執行驗證,只需編寫另一個視圖模型,該模型的刪除操作將作爲參數,並且不會有任何方法。

+0

感謝您的評論。我想我可以創建另一個視圖模型,但問題是'MyViewModel'正在擴展一個LINQ類。所以如果我創建一個新的視圖模型,我仍然會包含'MyViewModel'。 – Martin

+0

@Martin,視圖模型不應該擴展任何域實體,比如LINQ類。它們應該是獨立的,並且與特定觀點的要求特別相關。例如,在你的情況下,你有不同的驗證邏輯,所以不同的視圖模型是合理的。您的控制器操作只採用視圖模型並將視圖傳遞給視圖,而不是任何域實體,這是一種很好的做法。 –

+0

好的,我在那裏看到你的邏輯。我會嘗試做一些改變。 – Martin

相關問題