asp.net mvc添加验证导致Model为null

时间:2009-08-04 07:14:44

标签: asp.net-mvc validation

我刚刚完成了我的第一个asp.net mvc网站,但我对验证的稳健性不满意。

我读了验证,然后将以下代码添加到我的UsersController中的Edit操作:

  if (user_.firstname.Trim().Length == 0)
        {
            ModelState.AddModelError("firstname", "First Name is required.");
            return View();
        }

我刚刚对此进行了测试,我现在在模型为空的视图中出现错误。

<% using (Html.BeginForm())
   {%>
<fieldset>
    <legend>Fields</legend>
    <p>
        <label for="Email">
            Login Name:
            <%= Model.loginName%>
        </label>
    </p>
    <p>

所以在上面的Model中是null,所以我在Model.loginName上得到了一个异常。任何想法发生在这里。如果我删除上面的代码(验证)一切正常。 (除了我可以把垃圾放在我的数据库中。

4 个答案:

答案 0 :(得分:4)

请参阅我对类似主题的回应。

Validating form using ModelState

每次向ModelState添加模型错误并再次调用View时,asp.net MVC框架都会尝试查找尝试的值。此外,您的View应该将user_对象返回到强类型视图。

if (user_.firstname.Trim().Length == 0)
{
    ModelState.AddModelError("firstname", "First Name is required.");
    ModelState.SetModelValue("firstname", ValueProvider["firstname"]);

    return View(user_);
}

答案 1 :(得分:1)

你得到一个模型null错误,因为你没有将模型传递给视图......是否有什么阻止你这样做?

E.g。

if (user_.firstname.Trim().Length == 0)
{
    ModelState.AddModelError("firstname", "First Name is required.");
    return View(user_);
}

虽然这应该可以解决...你应该真正了解验证的工作原理。验证应该在控制器以外的其他地方进行,例如,我将所有验证都放在模型本身中。

答案 2 :(得分:1)

我在返回方法中添加了模型,现在它开始工作了。

感谢您的回答。

返回视图(contactToEdit);

答案 3 :(得分:0)

在您的控制器中,您应该添加重载方法:

    public ViewResult UpdateUser()
    {
        return View();
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult UpdateUser(user data)
    {
         if (user_.firstname.Trim().Length == 0)
         {
            ModelState.AddModelError("firstname", "First Name is required.");
            return View();
         }
         return View();
    }

使用此解决方案,第二种方法中的模型不会为空