我已经创建了一个自定义验证属性以应用于我的视图模型。在我的表单中,我有一个@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
数据注释验证器,并显示错误消息。
如何让验证摘要显示我的自定义错误消息?
答案 0 :(得分:0)
您正在返回一个只有字符串JsonResult
的{{1}}对象,MVC如何知道客户端显示的验证消息?如果您使用普通发布(使用"error"
),则只能返回相同的模型,并显示验证消息:
ActionResult
您也可以在控制器中自己验证对象,并使用return View(viewModel);
JsonResult
课程返回错误消息
或您可以尝试从return Json("error message here");
属性获取验证错误消息,并使用Json返回它们。查看this question的第二个答案。