2012-05-19 8 views
0

我得到了繼承IValidatableObject的類,我的驗證通過IEnumerable<ValidationResult>函數進行驗證。在這個功能裏,我設法檢查所有的字段並返回一個ValidationResult消息。如何在ValidationResult中傳遞memberNames IEnumerable?

但是,我的問題是membernames.ToArray()只傳遞一個值。我在驗證視圖頁面時以及當它檢查字段是否有效時使用Html.ViewData.ModelState.IsValid("<fieldname>")

證明它是下面的代碼,當我返回帶有無效的所有字段的ValidationResult消息時。 string.Join(",", membernames.ToArray())將返回字段的集合。 (即 「名字」, 「姓氏」)

List<string> membernames = new List<string>(); 

//Firstname 
if (FirstName.Trim() == string.Empty) 
{ 
    isValid = false; 
    membernames.Add(@"""FirstName"""); 
} 

//Lastname 
if (LastName.Trim() == string.Empty) 
{ 
    membernames.Add(@"""LastName"""); 
    isValid = false; 
} 

if (!isValid) 
{ 
    yield return new ValidationResult("Please complete all fields marked with *", new[] { string.Join(",", membernames.ToArray()) }); 
} 

難道我通過在new[] { .. }正確的類型?

請指教。提前致謝。

回答

0

在MVC3:

在控制器

ModelState.AddModelError("FirstName", "FirstName Minimum 2 Char"); 
ModelState.AddModelError("FirstName", "FirstName Maximum 20 Char"); 
ModelState.AddModelError("LastName", "Error Message"); 

,如果你想爲所有的財產只有一個錯誤信息:

ModelState.AddModelError("", "First Error Message"); 
ModelState.AddModelError("", "Second Error Message"); 
在查看

@using (Html.BeginForm()) { 
    @Html.ValidationSummary() 

    @Html.LabelFor(model => model.FirstName) 
    @Html.EditorFor(model => model.FirstName) 
    @Html.ValidationMessageFor(model => model.FirstName) 

    @Html.LabelFor(model => model.LastName) 
    @Html.EditorFor(model => model.LastName) 
    @Html.ValidationMessageFor(model => model.LastName) 

    //other fields... 
} 

唐別忘了jquery和Vali插件插件:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
+0

這一個將顯示每個錯誤消息。我使用1個驗證結果只返回1條消息。 – jeff

+0

ModelState.AddModelError()幫助您將零或許多驗證錯誤添加到模型或整個模型的屬性。我認爲它可以解決你的問題 – Morteza

相關問題