2010-08-02 37 views
7

我想補充CustomValidation,並使其成爲如何在ASP.NET MVC CustomValidation中指定錯誤成員鍵?

Html.ValidationMessageFor(M => m.SubleaseCompany)

[CustomValidation(typeof(CreateSpaceModelValidation), "ValidateCreateSpaceModel")] 
public class CreateSpaceModel 
{ 
    public Building Building { get; set; } 
    public Space Space { get; set; } 

    public string SubleaseCompany { get; set; } 
} 

public class CreateSpaceModelValidation 
{ 
    public static ValidationResult ValidateCreateSpaceModel(CreateSpaceModel model) 
    { 
     return new ValidationResult("You should specify Sublease Contact", new[] { "SubleaseCompany" }).; 
    } 
} 

我使用的是第二個參數的構造函數的ValidationResult(memberNames返回錯誤)但這似乎不起作用。

+0

你最終選擇了哪條路線? – Aaron 2011-08-25 21:44:05

回答

8

看起來MVC團隊從未實現MemberNames參數的功能。 見從以下發揮.... http://devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net-mvc-3-part-2

在某些情況下,你可能會 傾向於使用的ValidationResult的第二個構造 重載 需要在 成員名稱一個IEnumerable。例如,你可能 決定要顯示在兩個場是 相比 錯誤信息,所以你更改代碼以 此:

return new ValidationResult(
    FormatErrorMessage(validationContext.DisplayName), 

新[] {validationContext.MemberName, OtherProperty} );

如果你運行你的代碼,你會發現 絕對沒有區別。這是 ,因爲儘管此重載爲 ,並且可能在其他位置使用,但在MVC 框架中完全忽略了 ValidationResult.MemberNames。