ビュー モデルに適用するカスタム検証属性を作成しました。私のフォームでは、@Html.ValidationSummary
コントロールがあります。カスタム検証属性が無効な場合、何らかの理由でサマリー コントロールにエラー メッセージが表示されません。
これが私のカスタムバリデータです:
public class UserFolderExistsAttribute : ValidationAttribute
{
private const string _defaultErrorMessage =
"A folder with this name already exists";
private readonly object _typeId = new object();
public UserFolderExistsAttribute(string folderName) :
base(_defaultErrorMessage)
{
FolderName = folderName;
}
public string FolderName { get; private set; }
public override object TypeId { get { return _typeId; } }
public override bool IsValid(object value)
{
return false; // return error message to test for now
}
}
カスタムバリデーター属性が適用されたビューモデルは次のとおりです。
[UserFolderExists("Name")]
public class UserFolderViewModel
{
[Required(ErrorMessage = "Name is required")]
public string Name { get; set; }
}
これが私の部分的な見方です:
@using (Ajax.BeginForm("Create", "Folders",
new AjaxOptions { OnSuccess = "OnSuccess" }))
{
@Html.AntiForgeryToken()
@Html.TextBoxFor(m => m.Name, new { placeholder = "Name" })
<p>@Html.ValidationSummary()</p>
<p><input type="submit" class="create" value="" /></p>
}
私のフォームが投稿されている方法は次のとおりです。
[HttpPost]
public JsonResult Create(UserFolderViewModel viewModel)
{
if (ModelState.IsValid)
{
// do something
}
return Json("error");
}
このModelState.IsValid
属性は false を返すため、カスタム バリデータが認識されます。しかし、サマリー コントロールにメッセージが自動的に表示されません。サマリーはRequired
データ注釈バリデータを認識し、エラー メッセージを表示します。
Validation Summary を取得してカスタム エラー メッセージを表示するにはどうすればよいですか?