如何为模型内的对象添加ModelState错误

时间:2014-10-23 09:20:46

标签: asp.net-mvc asp.net-mvc-4 model-view-controller

我有以下型号:

class Identity
{
    public string Name { get; set; }
    public string Surname { get; set; }
}

class Person
{
    public Identity Identity { get; set; }
}

现在我想在我的控制器中为姓氏添加验证模型错误:

[HttpPost]
public ActionResult CreatePerson(Person person)
{
   // some validation stuff
   ModelState.AddModelError("Identity.Surname", "Surname has not been found in BBDD");
                             ^^^^^^^^^^^^^^^^
}

如何在Identity对象中引用姓氏以在我的视图中正确显示验证错误?

我在视图中显示验证错误:

@Html.ValidationMessageFor(model => model.Identity.Surname)

但错误显示在一般验证摘要中。

1 个答案:

答案 0 :(得分:1)

您可以尝试在您的Surname属性中实现Remote属性。它允许您使用ajax在客户端执行验证,以检查服务器上的任何内容。这是documentation

class Identity
{
    public string Name { get; set; }
    [Remote("CheckSurname", "Validation")]
    public string Surname { get; set; }
}

public class ValidationController : Controller {

    public JsonResult CheckSurname(string Surname) {

        if(/*your busines logic*/) {
            return Json(true, JsonRequestBehavior.AllowGet);
        }
        else {
            return Json("Your error message here", JsonRequestBehavior.AllowGet);
        } 

    }
}
在web.config中

你应该启用它:

<appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>