早上好,
我认为自己比ASP.NET
的初学者好一点,但我有一个问题,我需要帮助,我觉得应该相当简单,但不能开始工作。我目前正在建立一个网站,并希望在提交表单时实施一些验证规则。我知道我可以直接为我在其中创建相应的ActionResult方法的每个页面编写验证,但我更愿意将验证代码编写为控制器中自己的方法,并且在控制器中调用每个ActionResult中的方法(例如,我的ActionResult Create,ActionResult Edit,ActionResult Review)。我想这样做是为了让代码更简单易读,特别是因为我写的验证代码大约有500行。
这里只是我使用的代码的一部分:
if (ModelState.IsValidField("Name") && customerDatabase.Name== null)
{
ModelState.AddModelError("Name", "The customer's name is required.");
}
if (ModelState.IsValidField("AccountNumber") && customerDatabase.AccountNumber.Length != 10)
{
ModelState.AddModelError("AccountNumber", "The customer's account number must be 10 digits long.");
}
if (ModelState.IsValidField("Address") && customerDatabase.Address == null)
{
ModelState.AddModelError("Address", "The customer's address is required.");
}
提前感谢您的帮助!
答案 0 :(得分:2)
考虑对模型上的简单验证使用验证属性
在MVC中,验证在客户端和服务器上都会发生。
幸运的是,.NET已将验证抽象为验证属性。这些属性包含验证代码,从而减少了必须编写的代码量。
例如
public class CustomerDatabase {
[Required]
public string Name { get; set; }
[StringLength(10)]
public string AccountNumber { get; set; }
[Required]
public string Address { get; set; }
//...other properties
}
这也允许在MVC视图中进行客户端验证
它将减少服务器上所需的重复验证量
if(ModelState.IsValid) {
//...
}
return View(customerDatabase);
另一种方法是创建自定义操作过滤器以应用验证检查
public class ValidateCustomerModelAttribute : ActionFilterAttribute {
public override void OnActionExecuting(ActionExecutingContext context) {
var ModelState = context.Controller.ViewData.ModelState;
var customerDatabase = (MyModel)ModelState.Value; //cast to expected model type
if (ModelState.IsValidField("Name") && customerDatabase.Name== null) {
ModelState.AddModelError("Name", "The customer's name is required.");
}
if (ModelState.IsValidField("AccountNumber") && customerDatabase.AccountNumber.Length != 10) {
ModelState.AddModelError("AccountNumber", "The customer's account number must be 10 digits long.");
}
if (ModelState.IsValidField("Address") && customerDatabase.Address == null) {
ModelState.AddModelError("Address", "The customer's address is required.");
}
//...
}
}
并将其用于所需的操作
[ValidateCustomerModel]
[HttpPost]
public ActionResult Create(MyModel customerDatabase) {
if(ModelState.IsValid) {
//...
}
return View(customerDatabase);
}