2013-11-09 259 views
1

我已经创建了自定义验证属性以应用于我的视图模型。在我的表格中,我有一个@Html.ValidationSummary控件。当我的自定义验证属性无效时,出于某种原因,汇总控件不显示错误消息。自定义验证错误消息不会显示在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

你正在返回一个JsonResult对象,里面只有一个字符串"error",MVC如何能够知道在客户端显示的验证消息?如果使用普通邮寄(以ActionResult),你只需返回相同的模型和验证消息就会出现:

return View(viewModel); 

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

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

相关问题