gpt4 book ai didi

asp.net-mvc - 我可以从模型类(而不是 Controller )添加 ModelState.AddModelError 吗?

转载 作者:行者123 更新时间:2023-12-02 02:19:10 28 4
gpt4 key购买 nike

我想使用 ModelState.AddModelError() 在 ASP.MVC 3 输入表单中向用户显示错误,以便它自动突出显示正确的字段并将错误放在特定字段旁边。

在大多数示例中,我看到 ModelState.AddModelError() 和 if(ModelState.IsValid) 放置在 Controller 的右侧。但是,我想将该验证逻辑移动/集中到模型类。我可以让模型类检查模型错误并填充 ModelState.AddModelError() 吗?

当前代码:

// Controller
[HttpPost]
public ActionResult Foo(Bar bar)
{
// This model check is run here inside the controller.
if (bar.isOutsideServiceArea())
ModelState.AddModelError("Address", "Unfortunately, we cannot serve your address.");

// This is another model check run here inside the controller.
if (bar.isDuplicate())
ModelState.AddModelError("OrderNumber", "This appears to be a duplicate order");

if (ModelState.IsValid)
{
bar.Save();
return RedirectToAction("Index");
}
else
return View(bar)
}

所需代码:

// Controller
[HttpPost]
public ActionResult Foo(Bar bar)
{
// something here to invoke all tests on bar within the model class

if (ModelState.IsValid)
{
bar.Save();
return RedirectToAction("Index");
}
else
return View(bar)
}


...
// Inside the relevant Model class
if (bar.isOutsideServiceArea())
ModelState.AddModelError("Address", "Unfortunately, we cannot serve your address.");

if (bar.isDuplicate())
ModelState.AddModelError("OrderNumber", "This appears to be a duplicate order");

最佳答案

如果您使用的是 MVC 3,您应该查看 IValidatableObject ,这就是你所追求的。

Scott Gu 在他的 MVC3 Intro 中提到了这一点博客发布。

关于asp.net-mvc - 我可以从模型类(而不是 Controller )添加 ModelState.AddModelError 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6432661/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com