假设您有一个名为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的一些信息;是需要什么?
答案 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");
}
...
}