代码之家  ›  专栏  ›  技术社区  ›  jerhinesmith

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

  •  0
  • jerhinesmith  · 技术社区  · 16 年前

    假设您有一个名为Person的对象,其外观如下:

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

    我有一个简单的HTML表单,它公开了发布到我的PersonController类内的ASP.NET MVC操作的属性。我的问题是如果有人把字母“A”写在 NumberOfCatsNamedEnder 我得到了 “person”类型的模型未成功更新。 错误。因为这是在尝试更新模型时发生的,所以我找不到任何方法来检查是否有人在不使用

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

    有更好的方法吗?我能够找到一些关于定制模型绑定的信息,这是需要的吗?

    1 回复  |  直到 16 年前
        1
  •  1
  •   MrDustpan    16 年前

    我非常喜欢使用 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*/ }
    }
    

    然后,您的控制器操作可以将视图绑定到个人演示文稿:

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

    …然后接受更新方法中的一个并执行验证:

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