我正在使用 MVC 4 和实体框架开发 Web 应用程序。我正在使用代表要创建/编辑/删除的产品的 ViewModel。我创建了一个验证类,它检查条目并在必要时显示错误消息。
由于我使用的是 ViewModel,不幸的是错误消息不再显示?我应该如何进行?
这是我的 ViewModel :
public class ProductViewModel
{
public Product Product { get; set; }
public ProductType ProductType { get; set; }
public List<SelectListItem> ProductCompanies { get; set; }
}
这是我的操作(例如创建):
[HttpPost]
public ActionResult Create(ProductViewModel pvm)
{
pvm.ProductCompanies = db.ProductCompanies.ToList().Select(s => new SelectListItem
{
Text = s.Name,
Value = s.Id_ProductCompany.ToString()
}).ToList();
ViewBag.Id_ProductCompany = new SelectList(db.ProductCompanies, "Id_ProductCompany", "Name", pvm.ProductType.Id_ProductCompany);
if (ModelState.IsValid)
{
ModelStateDictionary errors = Validator.isValid(pvm.ProductType);
if (errors.Count > 0)
{
ModelState.Merge(errors);
return View(pvm);
}
Product product = new Product
{
PurchaseDate = pvm.Product.PurchaseDate,
SerialNumber = pvm.Product.SerialNumber,
Id_ProductType = pvm.ProductType.Id_ProductType
};
ProductType productType = new ProductType
{
Model = pvm.ProductType.Model,
CatalogPrice = pvm.ProductType.CatalogPrice,
Id_ProductCompany = pvm.ProductType.Id_ProductCompany
};
db.ProductTypes.AddObject(productType);
db.Products.AddObject(product);
db.SaveChanges();
return RedirectToAction("Index", "Person");
}
return View(pvm);
}
我自己的验证器:
public static ModelStateDictionary isValid(ProductType element)
{
ModelStateDictionary errors = new ModelStateDictionary();
if (!Regex.IsMatch(element.Model, @"^[a-zA-Z0-9\s][a-zA-Z-_0-9\s]+$"))
{
errors.AddModelError("Model", "Invalid name !");
}
return errors;
}
以及应该显示消息的位置:
<div class="editor-label">
Model :
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.ProductType.Model, new { maxlength = 50 })
@Html.ValidationMessageFor(model => model.ProductType.Model)
</div>