gpt4 book ai didi

asp.net-mvc - 执行验证 : ViewModel, 模型或 Controller 的推荐位置是什么?

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

我有一个注册页面,想对重复的用户名和电子邮件地址执行一些验证(除了我的 ViewModel 上的 StringLength 和 Required 注释)。目前,当回发注册表单时,我在我的 Controller 中执行此验证。我不确定这是否是正确的地方。

我无法想象 ViewModel 是正确的位置,因为它需要 ViewModel 引用我的 UserRepository。在模型类中进行这种验证有意义吗?

如果是这样,我如何在模型上实现它,以便在将信息发送到我的存储库之前检查信息是否有效?

更新

我的 Controller 操作代码:

if (ModelState.IsValid)
{
if (!_userRepository.Exists(registerViewModel.Username))
{
if (!_userRepository.EmailExists(registerViewModel.Email))
{
_userRepository.Add(
new User
{
Created = DateTime.Now,
Email = registerViewModel.Email,
Password = registerViewModel.Password,
Username = registerViewModel.Username
});

_userRepository.SaveChanges();
TempData["registrationDetails"] = registerViewModel;

return RedirectToAction("Confirm");
}
else
{
ModelState.AddModelError(string.Empty, "This email address is already in use.");
}
}
else
{
ModelState.AddModelError(string.Empty, "This username is already taken.");
}
}

return View(registerViewModel);
}

更新 2

域模型是否应该关心诸如重复的用户名或电子邮件地址之类的约束,或者这是 Controller 层应该担心的事情?

更新 3

似乎将验证逻辑放在 Controller 中最有意义,因为它可以在远程验证和提交时的模型验证中重用。检查重复项之类的事情通常应该在 Controller 中完成,还是在域模型中进行此类检查是否有意义?

谢谢,

最佳答案

我会在前端(也许是 ajax)和后端执行它——这取决于您的解决方案架构。

我喜欢让用户立即知道是否会有注册问题。
在我的数据层/业务层和表示层的典型设置中,我将在业务逻辑中执行 dup 检查,并让 Controller 调用那段代码(除了在前端为用户进行 ajax 查找)。

附带说明一下:我通常更喜欢在 Windows 应用程序中只使用 MVVM(带有 View 模型)。将 MVC 与 MVVM 相结合会使事情变得不必要地复杂

关于asp.net-mvc - 执行验证 : ViewModel, 模型或 Controller 的推荐位置是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5163270/

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