gpt4 book ai didi

asp.net-mvc - 在哪里放置验证注释 ViewModel 或 Domain 对象?

转载 作者:行者123 更新时间:2023-12-04 20:06:10 25 4
gpt4 key购买 nike

我的问题是

当我从我的 Create Controller 传递 UserCreateViewModel 时,这意味着我的 Validation(ModelState.IsValid) 只能工作
如果在其上定义了注释,则在 UserCreateViewModel 上。但是我不能在我的每个 ViewModel 上定义 DataAnnotation,因为这将是很多工作。
相反,我想把它放在用户域模型上。那么如何修复 Create 方法以修复我的 Annotation 工作和映射器,而无需向 Controller 添加更多代码。

//我的 Controller 创建方法

[HttpPost]
public ActionResult Create(UserCreateViewModel user)
{
if (ModelState.IsValid)
{
var createUser = new User();
Mapper.Map(user, createUser);

_repository.Add(createUser);

return RedirectToAction("Details", new { id = createUser.UserId });
}

return View("Edit", user);
}

//UserCreateViewModel -> 创建特定的 View 模型
public class UserCreateViewModel
{
public string UserName { get; set; }
public string Password { get; set; }
}

//用户 -> 域对象
[MetadataType(typeof(User.UserValidation))]
public partial class User
{
private class UserValidation
{
[Required(ErrorMessage = "UserName is required.")]
[StringLength(50, MinimumLength = 2, ErrorMessage = "{0} is between {1} to {2}")]
[RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed")]
public string UserName { get; set; }

[Required(ErrorMessage = "Password is required.")]
[StringLength(50, MinimumLength = 2, ErrorMessage = "{0} is between {1} to {2}")]
public string Password { get; set; }
}
}

最佳答案

至少应该在 View 模型上进行验证,因为这是您作为用户输入收到的内容。就模型验证而言,您也可以添加它,但只要您将 View 模型传递给您的 POST 操作(这正是您应该做的),模型上的验证将被忽略。当然这在这里不是问题,因为模型可以在其他不使用 View 模型的应用程序上重用,这样你的模型就可以保证是有效的。就 ASP.NET MVC 而言,这一步不是必需的。

关于asp.net-mvc - 在哪里放置验证注释 ViewModel 或 Domain 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4331981/

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