4
我有一個Html.ValidationSummary(true)標記的剃刀視圖。Html.ValidationSummary(true)不顯示Ivalidatable錯誤
屬性級驗證執行正常,消息顯示在錯誤字段旁邊。然而,對於通過Validate方法實現IValidatable的驗證,我有一個問題。
如果模型本身實現IValidatable則錯誤被添加到的ModelState和正確地在Html.ValidationSummary(真)標籤(型號水平誤差不屬性電平)顯示 IF然而視圖模型包含對複雜的參照對象(用[必填]註釋裝飾),則不顯示消息。它被添加到ModelState中並且isValid正確地變爲false。它在錯誤和顯示列表中是一個模型級錯誤但是不顯示。 (如果使用Html.ValidationSummary(false),則顯示消息)。
這只是不可行嗎?難道我做錯了什麼?唧唧歪歪移動到流利,但再次是更多的工作....
下面是代碼示例: 視圖模型:
public class ViewModel
{
[Required]
public TestModel DataModel { get; set; }
}
TestModel:
public class TestModel : IValidatableObject
{
[Display(ResourceType = typeof(ViewResources), Name = "Field1")]
public string Field1 { get; set; }
public string Field2 { get; set; }
[Required]
public string Field3 { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (string.IsNullOrEmpty(Field1) && string.IsNullOrEmpty(Field2))
{
yield return new ValidationResult("Need to enter either Field1 or Field2.");
}
}
}
Razor視圖:
@using (Ajax.BeginForm(new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "createDialog" }))
{
@Html.ValidationSummary(true)
<fieldset>
<div class="editor-label">
@Html.LabelFor(model => model.DataModel.Field1)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.DataModel.Field1)
@Html.ValidationMessageFor(model => model.DataModel.Field1)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.DataModel.Field2)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.DataModel.Field2)
@Html.ValidationMessageFor(model => model.DataModel.Field2)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.DataModel.Field3)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.DataModel.Field3)
@Html.ValidationMessageFor(model => model.DataModel.Field3)
</div>
<p>
<input type="submit" value="Submit"/>
</p>
</fieldset>
控制器:
if (!ModelState.IsValid) return View();
return View();