C# 自定义验证错误消息不存在';t在Html.ValidationSummary中显示

C# 自定义验证错误消息不存在';t在Html.ValidationSummary中显示,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我已经创建了一个自定义验证属性以应用于我的视图模型。在我的表单中,我有一个@Html.ValidationSummary控件。当自定义验证属性无效时,由于某种原因,摘要控件不会显示错误消息 这是我的自定义验证器: public class UserFolderExistsAttribute : ValidationAttribute { private const string _defaultErrorMessage = "A folder with this nam

我已经创建了一个自定义验证属性以应用于我的视图模型。在我的表单中,我有一个
@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>
}
ModelState.IsValid
属性返回false,因此它可以识别我的自定义验证器。但是摘要控件不会自动显示我的消息。摘要可识别
必需的
数据注释验证程序,并显示错误消息


如何获取验证摘要以显示自定义错误消息?

如果返回的是一个
JsonResult
对象,其中只有一个字符串
“error”
,MVC如何知道要在客户端显示的验证消息?如果使用普通过帐(使用
ActionResult
),您只需返回相同的模型,就会出现验证消息:

return View(viewModel);
您还可以自己在控制器中验证对象,并通过
JsonResult
类使用
returnjson(“此处的错误消息”)返回错误消息

或者,您可以尝试从
ModelState
属性获取验证错误消息,并用Json返回它们。看看第二个答案

return View(viewModel);