【问题标题】:How to add a ModelState error for an object inside a model如何为模型内的对象添加 ModelState 错误
【发布时间】:2014-10-23 09:20:46
【问题描述】:

我有以下型号:

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)

但错误显示在常规验证摘要中。

【问题讨论】:

  • Person - public Identity WhatName { get; set; } 中的属性名称是什么!
  • 抱歉,拼写错误,已更新。
  • 那么 ModelState.AddModelError("Identity.Surname", "...) 是正确的 - 假设您查看有 @Html.ValidationMessageFor(m => m.Identity.Surname)
  • @StephenMuecke:嗯,我明白了,它并没有真正起作用,我不知道为什么

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


【解决方案1】:

您可以尝试为您的姓氏属性实现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>

【讨论】:

  • 不错的建议,但不是问题的答案
  • @StephenMuecke 只是执行操作任务的另一种方式。他想要错误页面?他无需张贴表格即可获得。
  • 它没有回答 OP 的问题,即 如何在控制器中添加 ModelState 错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 2013-07-11
  • 2016-08-31
  • 2017-07-28
  • 2017-11-02
相关资源
最近更新 更多