gpt4 book ai didi

asp.net-mvc - MVC3 服务层验证。返回异常、自定义对象、模型状态字典?

转载 作者:行者123 更新时间:2023-12-01 22:07:40 27 4
gpt4 key购买 nike

只是想知道您对服务层验证的想法或经验。

我必须处理相当标准的验证,例如“具有 name 属性的对象尚不存在”,但我不确定如何将这些验证失败返回到 Controller 。

我最初的想法是实现一个标准 List<ValidationError>但我已经看到了它的每一种方式,所以很好奇每种方式的优点/缺点。

感谢您的任何意见。

最佳答案

如果您使用 System.ComponentModel.DataAnnotations 条目,您可以(正如您似乎知道的那样)使用必需的和更多标签来装饰您的属性

public class Person
{
[Required(ErrorMessage="object with name property doesn't already exist")]
public string Name { get; set; }
}

虽然我个人使用 ViewModels 而不是向 View 公开域 mdoels,但您的 Controller 操作现在可以执行以下操作:

[HttpPost]
public ActionResult SavePerson(Person model)
{
if (ModelState.IsValid)
{
// your model validates - do things

return RedirectToAction("success view here");
}
return View(model);
}

这是 MVC 中标准“后”处理程序模式之一。我认为这是验证对象模型的最简单途径。

从那里,还有一些其他选项 - 您的域对象可以实现 IValidatedableObject,并且您可以 yield return错误(请参阅 http://buildstarted.com/2010/09/20/mvc-3s-ivalidatableobject/ 作为示例)。

我建议不要混合这两者,就好像您正在使用数据注释并且甚至有一个无效属性一样,IValidatableObject 上的 IsValid 方法将不会被调用。

从这里开始,您可以使用自定义验证属性做很多事情(IsValid 的扩展版本似乎为您提供了更大的灵 active http://msdn.microsoft.com/en-us/library/gg480674%28v=vs.98%29.aspx )

希望上述内容对您有所帮助 - 一旦您掌握了基础知识,您就可以用它做很多事情,并且诸如自定义属性的客户端验证等事情都很有趣。

干杯,特里

[编辑添加:

重新阅读您的帖子后,您可能只想在服务层进行验证?如果是这样,我使用了以下方法:

public void Setname(string newName)
{
Validator.ValidateProperty(newName, new ValidationContext(this, null, null) { MemberName = "Name" });

Name = newName;
}

显然您的 Name 属性需要 { get; private set; }为此,尽管您始终可以将 Validator.ValidateProperty 添加到公共(public)属性的扩展 setter 中。

]

关于asp.net-mvc - MVC3 服务层验证。返回异常、自定义对象、模型状态字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5684920/

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