这是我的模特。我正在使用强类型模型。但是当我尝试使用下拉值时,对我来说这是一个问题:
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
}
这是Controller for Add例程(创建记录)
public ActionResult Create()
{
ViewBag.MovieType = new SelectList(new[] {"Comedy","Romantic","Action","Thriller" });
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Movie movie)
{
if (ModelState.IsValid)
{
db.Movies.Add(movie);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(movie);
}
以下是我的具体视图部分
@Html.LabelFor(m => m.Genre)
<div class="editor-field">
@Html.DropDownList("MyItems",(SelectList) ViewBag.MovieType)
@Html.ValidationMessageFor(model => model.Genre)
</div>
虽然dropdown
工作正常。问题是我正在使用
@Html.Editorfor
用于其他模型字段,我收到了model
值,但对于movieType Genre
,我获得了null
值。
我用Viewbag
尝试@Html.Editorfor
,但我找不到超载。任何人都可以让我知道如何实现相同的目标吗?
答案 0 :(得分:1)
将下拉列表绑定到不存在的名为MyItems
的属性。将其更改为
@Html.DropDownListFor(m => m.Genre, (SelectList)ViewBag.MovieType)
另请注意,如果您返回视图,则必须在POST方法中重新分配ViewBag.MovieType
的值(即ModelState
如果无效)
public ActionResult Create(Movie movie)
{
if (ModelState.IsValid)
{
db.Movies.Add(movie);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.MovieType = new SelectList(new[] {"Comedy","Romantic","Action","Thriller" }); // add this
return View(movie);
}