如何捕获映射到UpdateModel()中的整数属性的非整数值

时间:2009-05-08 16:19:22

标签: asp.net-mvc validation

假设您有一个名为Person的对象,如下所示:

class Person
{
  public int ID { get; set; }
  public string Name { get; set; }
  public int NumberOfCatsNamedEnder { get; set; }
}

我有一个简单的HTML表单,它公开了发布到PersonController类内部的ASP.NET MVC操作的属性。我遇到的问题是,如果有人为NumberOfCatsNamedEnder添加了字母“A”,我会得到“人物”类型的模型未成功更新。错误。由于这在尝试更新模型时发生,我找不到任何方法来检查是否有人传递非整数值而不诉诸

if(!IsInteger(formCollection["NumberOfCatsNamedEnder"]))
{
  ModelState.AddModelError(
    "NumberOfCatsNamedEnder",
    "Ender count should be a number");
}

有更好的方法吗?我能够找到关于自定义ModelBinder的一些信息;是需要什么?

1 个答案:

答案 0 :(得分:1)

我非常喜欢使用presentation model的方法。我会创建一个这样的类:

class PersonPresentation
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string NumberOfCatsNamedEnder { get; set; }

    public void FromPerson(Person person){ /*Load data from person*/ }
}

然后您的控制器操作可以将视图绑定到PersonPresentation:

public ActionResult Index()
{
    Person person = GetPerson();
    PersonPresentation presentation = new PersonPresentation();
    ViewData.Model = presentation.FromPerson(person);
    return View();
}

...然后在Update方法中接受一个并执行验证:

public ActionResult Update(PersonPresentation presentation)
{
    if(!IsInteger(presentation.NumberOfCatsNamedEnder))
    {
        ModelState.AddModelError(
          "NumberOfCatsNamedEnder",
          "Ender count should be a number");
    }
    ...
}