ASP.. NET模型验证与ViewModel



我得到了一个项目,我可以插入新闻到数据库与ASP。净MVC。我拥有的是一个NewsModel和一个NewsViewModel。新闻模型是在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;
}

所以我的问题是,ModelState。IsValid总是false,如果我没有在NewsViewModel中初始化NewsModel。如果我初始化它,它总是为真,我无法进入create视图。结果是一个错误。我试图将布尔值添加到NewsViewModel以将其设置为true或false并检查它,但我无法更改视图中布尔值。我试着这样做:

@{ Model.isvalid = true }

那么,有没有一种方法可以在Razor视图中初始化Newsmodel,从而使模型状态变得有效呢?还是我完全错过了什么?

信息:在我的项目的前一个版本,我没有视图模型。只有新闻模型,只有字符串和整数在里面。这对他们起作用了……现在唯一的区别是,我有这个NewsModel在我的NewsViewModel类。

我希望有人能帮助我。还没找到解决办法

您可以使用

查找modelstate的无效属性
foreach (ModelState modelState in ViewData.ModelState.Values) {
    foreach (ModelError error in modelState.Errors) {
        // errors here 
    }
}

视图模型不应该包含数据模型。删除并替换它控件中要显示/编辑的NewsModel的属性视图。而你的[Required]属性在你的SelectLists没有并且总是会导致ModelState无效(您不发布)backselectlist 's

相关内容

  • 没有找到相关文章

最新更新