私はHtml.ValidationSummary(true)タグを持つRazorビューを持っています。Html.ValidationSummary(true)に無効なエラーが表示されない
プロパティレベルの検証が正常に実行されていて、エラーのあるフィールドの横にメッセージが表示されます。しかし、IValidatableを実装しているValidateメソッドによる検証では、問題があります。
モデル自体がエラーにModelStateに添加し、正しくHtml.ValidationSummary(真)タグ(モデルレベルのエラーではないプロパティレベル)に表示され、その後IValidatableを実装している場合 ビューモデルが複雑への参照が含ましかし、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.");
}
}
}
カミソリビュー:
@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();