首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ModelState.isValid -假

ModelState.isValid -假
EN

Stack Overflow用户
提问于 2015-06-21 13:15:53
回答 1查看 565关注 0票数 2

我希望从html页面上的dropdownList中获取参数,并将其发送到我的控制器,创建新的模型对象,并将其插入数据库。

这是我的控制器(创建My_Model的两种方法):

代码语言:javascript
复制
public ActionResult Create()
    {
        IEnumerable<MusicStyle> musicStyleList = db.MusicStyles.ToList();
        ViewData["musicStyles"] = new SelectList(musicStyleList);
        return View();
    }

    // POST: Bands/Create
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "id,name,info,appearanceDate,musicStyles")] Band band)
    {
        IEnumerable<MusicStyle> musicStyleList;
        if (ModelState.IsValid)
        {
            musicStyleList = db.MusicStyles;
            ViewData["musicStyles"] = new SelectList(musicStyleList).ToList();
            db.Bands.Add(band);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        musicStyleList = db.MusicStyles;
        ViewData["musicStyles"] = new SelectList(musicStyleList).ToList();
        return View(band);
    }

这是我在html页面上的dropdownList:

代码语言:javascript
复制
@Html.DropDownList("musicStyles", "select style")

这是我的模型:

代码语言:javascript
复制
 public class Band
{
    [Required]
    public int id { get; set; }

    [Required]
    [RegularExpression(@"^[a-zA-Z-\s\\\/*_]+$")]
    [StringLength(60, MinimumLength = 1)]
    public string name { get; set; } 

    public string info { get; set; }

    [Required]
    [Display(Name = "Appearance date")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
    public DateTime appearanceDate { get; set; }

    public List<MusicStyle> musicStyles { get; set; }
    public List<Song> songs { get; set; }
    public List<Album> albums { get; set; }
}

它有一个musicStyles列表(引用多对多),我希望将选定的元素从dropdownList设置为这个模型。但是作为Create方法的结果,我有一个null musicStylesModelState.isValid == false

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-21 13:26:43

<select>只回发一个值-它不能绑定到属性List<MusicStyle> musicStyles,您需要一个可以绑定到的属性的视图模型。

代码语言:javascript
复制
public class BandVM
{
  [Display(Name = "Music style")]
  [Required(ErrorMessage = "Please select a style")]
  public string SelectedMusicStyle { get; set; }
  public SelectList MusicStyleList { get; set; }
  ....
}

在控制器里

代码语言:javascript
复制
public ActionResult Create()
{
  BandVM model = new BandVM();
  model.MusicStyleList = new SelectList(db.MusicStyles);
  return View(model);
}

在视野中

代码语言:javascript
复制
@Html.LabelFor(m => m.SelectedMusicStyle)
@Html.DropDownListFor(m => m.SelectedMusicStyle, Model.MusicStyleList, "select style")
@Html.ValidationMessageFor(m => m.SelectedMusicStyle)

在POST法

代码语言:javascript
复制
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(BandVM model) // NO Bind.Include!
{
  // model.SelectedMusicStyle will contain the selected value
  // Create a new instance of the data model and map the view model properties to it
  // Save and redirect
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30964919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档