ASP.NET 使用 ViewModel 进行模型验证
ASP.NET Model validation with ViewModel
我有一个项目,我可以使用 ASP.NET MVC 将新闻插入数据库。我有一个 NewsModel 和一个 NewsViewModel。 Newsmodel 在 NewsViewModel 中声明。
这是我的 NewsViewController:
public ActionResult Index(NewsViewModel News)
{
//var errors = ModelState.Values.SelectMany(v => v.Errors);
if (ModelState.IsValid)
{
NewsViewRepository NewsRepo = new NewsViewRepository();
if (NewsRepo.AddNews(News))
{
ViewBag.Message = "News added successfully!";
databaseHasChanged = true;
}
}
return View(new NewsViewModel());
}
这是我的 NewsViewModel:
public class NewsViewModel
{
[Required(ErrorMessage = "First name is required.")]
public NewsModel news { get; set; }
public bool isvalid { get; set; }
private List<SelectListItem> languageItems= new List<SelectListItem>();
[Required(ErrorMessage = "Language items requierd")]
public List<SelectListItem> LanguageItems{get;set;}
[Required(ErrorMessage = "convetion requierd")]
private List<SelectListItem> conventionItems = new List<SelectListItem>();
[Required(ErrorMessage = "convetion requierd")]
public List<SelectListItem> ConventionItems {get; set;}
public int selectedIndex = 1;
}
所以我遇到的问题是,如果我不初始化 NewsViewModel 中的 NewsModel,ModelState.IsValid 总是错误的。如果我初始化它,它总是正确的,我不会进入创建视图。它以错误结束。我试图向 NewsViewModel 添加一个布尔值以将其设置为 true 或 false 并用它进行检查,但我无法更改视图中的布尔值。我这样试过:
@{ Model.isvalid = true }
那么有没有办法在 Razor 视图中初始化 Newsmodel,使 modelstate 生效?
或者我在这里完全错过了什么?
信息:在我的项目的前一个版本中,我没有视图模型。只有新闻模型,其中只有字符串和整数。它与他们一起工作..现在唯一的区别是我的 NewsViewModel class.
中有这个 NewsModel
我希望有人能帮助我。还没找到解决方法。
您可以使用
查找模型状态的无效属性
foreach (ModelState modelState in ViewData.ModelState.Values) {
foreach (ModelError error in modelState.Errors) {
// errors here
}
}
View models should never contain data models. Delete it and replace it
with the properties of NewsModel that you want to display/edit in the
view. And your [Required] attributes on your SelectLists makes no
sense and would always cause ModelState to be invalid (you do not post
back SelectList's –
我有一个项目,我可以使用 ASP.NET MVC 将新闻插入数据库。我有一个 NewsModel 和一个 NewsViewModel。 Newsmodel 在 NewsViewModel 中声明。
这是我的 NewsViewController:
public ActionResult Index(NewsViewModel News)
{
//var errors = ModelState.Values.SelectMany(v => v.Errors);
if (ModelState.IsValid)
{
NewsViewRepository NewsRepo = new NewsViewRepository();
if (NewsRepo.AddNews(News))
{
ViewBag.Message = "News added successfully!";
databaseHasChanged = true;
}
}
return View(new NewsViewModel());
}
这是我的 NewsViewModel:
public class NewsViewModel
{
[Required(ErrorMessage = "First name is required.")]
public NewsModel news { get; set; }
public bool isvalid { get; set; }
private List<SelectListItem> languageItems= new List<SelectListItem>();
[Required(ErrorMessage = "Language items requierd")]
public List<SelectListItem> LanguageItems{get;set;}
[Required(ErrorMessage = "convetion requierd")]
private List<SelectListItem> conventionItems = new List<SelectListItem>();
[Required(ErrorMessage = "convetion requierd")]
public List<SelectListItem> ConventionItems {get; set;}
public int selectedIndex = 1;
}
所以我遇到的问题是,如果我不初始化 NewsViewModel 中的 NewsModel,ModelState.IsValid 总是错误的。如果我初始化它,它总是正确的,我不会进入创建视图。它以错误结束。我试图向 NewsViewModel 添加一个布尔值以将其设置为 true 或 false 并用它进行检查,但我无法更改视图中的布尔值。我这样试过:
@{ Model.isvalid = true }
那么有没有办法在 Razor 视图中初始化 Newsmodel,使 modelstate 生效? 或者我在这里完全错过了什么?
信息:在我的项目的前一个版本中,我没有视图模型。只有新闻模型,其中只有字符串和整数。它与他们一起工作..现在唯一的区别是我的 NewsViewModel class.
中有这个 NewsModel我希望有人能帮助我。还没找到解决方法。
您可以使用
查找模型状态的无效属性foreach (ModelState modelState in ViewData.ModelState.Values) {
foreach (ModelError error in modelState.Errors) {
// errors here
}
}
View models should never contain data models. Delete it and replace it with the properties of NewsModel that you want to display/edit in the view. And your [Required] attributes on your SelectLists makes no sense and would always cause ModelState to be invalid (you do not post back SelectList's –