如何将控件的值从视图传递给控制器

时间:2015-10-28 03:45:06

标签: asp.net-mvc

这是我的模特。我正在使用强类型模型。但是当我尝试使用下拉值时,对我来说这是一个问题:

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,但我找不到超载。任何人都可以让我知道如何实现相同的目标吗?

1 个答案:

答案 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);
}