【问题标题】:Custom validation error message doesn't display in Html.ValidationSummary自定义验证错误消息不显示在 Html.ValidationSummary
【发布时间】:2013-11-09 19:16:48
【问题描述】:

我创建了一个自定义验证属性以应用于我的视图模型。在我的表单中,我有一个 @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 数据注释验证器,并显示了错误消息。

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

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-4


    【解决方案1】:

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

    return View(viewModel);
    

    您也可以自己在控制器中验证对象,并使用return Json("error message here");通过JsonResult类返回错误消息

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-23
      • 2018-02-08
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-09
      • 1970-01-01
      相关资源
      最近更新 更多