Oyy*_*you 7 c# asp.net model-view-controller repository-pattern
我正在开发一个网站,只是想了解总体结构。我在后台有一个数据库,我正在使用“存储库模式”访问该数据库。我的UserRepository类中有以下代码:
public bool IsValid(User user)
{
if (_context.Users.Any(c => c.EmailAddress == user.EmailAddress))
{
Message = "Email address already in use";
return false;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
这是在这里实现的
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(User user)
{
if (ModelState.IsValid)
{
var context = new Context("DatabaseContext");
var userRepo = new UserRepository(context);
if (userRepo.IsValid(user))
{
userRepo.Add(user);
// return to different view
}
else
{
// display userRepo.Message on page
return View(user);
}
}
return View(user);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是我认为我没有正确地处理“消息”位,但我在网上找不到任何可以帮助我的东西(特别是在存储库周围)。我认为我应该将IsValid的返回类型更改为类似结果的类型(正如我在对话框中看到的那样),但我再次不确定。
任何帮助将非常感激。
谢谢。
实现此目的的一种方法与您建议的完全一样 -更改 的返回类型IsValid。
过去,我在“业务层”中使用了类似的验证方法,这些方法返回 的集合ValidationResult,其中每个返回的记录都会导致模型内的验证错误,并且空集合将被解释为有效模型。
例如:
public class ValidationResult
{
public string FieldName { get; set; }
public string Message { get; set; }
}
public interface IValidator<T>
{
IEnumerable<ValidationResult> IsValid(T model);
}
//...in your implementation
public IEnumerable<ValidationResult> IsValid(User user)
{
//Return a new ValidationResult per validation error
if (_context.Users.Any(c => c.EmailAddress == user.EmailAddress))
{
yield return new ValidationResult
{
Message = "Email address already in use",
FieldName = nameof(user.EmailAddress)
};
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您的表示层可以将其解释为反馈给用户。