将数据从下拉列表保存到存储库

时间:2012-07-14 19:26:52

标签: c# asp.net-mvc

所以我的Viewbag在我的创建剃刀视图中的下拉列表中使用了以下代码:

控制器

 ViewBag.ActionTypes = new SelectList(query.AsEnumerable(), "ActionTypeID", "ActionTypeTitle");

然后我的剃刀做到了这一点;

  @Html.DropDownList("ActionTypeID", (IEnumerable<SelectListItem>)ViewBag.ActionTypes)

我坚持要在Post方法中添加什么以及如何从下拉列表中获取值?

任何人都可以指出我正确的方向

1 个答案:

答案 0 :(得分:1)

假设您有一个名为ActionType的模型:

public class ActionType
{
    public int ActionTypeID { get; set; }

    ...
}

由于您的SelectList使用相同的属性名称,因此ModelBinder将负责设置正确的POSTed值:

new SelectList(query.AsEnumerable(), "ActionTypeID", "ActionTypeTitle");
--------------------------------------------^

请记住向您在Action中使用的Model类添加一个具有相同名称的属性:

-------------------------------v  Add the property to this class.
[HttpPost]
public ActionResult Create(SomeModel model)
{
}

这是一个例子。想象一下,您已经由Entity Framework生成了以下实体:

Person       Country
-------      -------
PersonID     CountryID
FullName     Name
CountryID


[HttpPost]
public ActionResult Create(PersonModel model)
{
    if (ModelState.IsValid)
    {
        DbEntities db = new DbEntities();
        Person person = new Person();
        person.FullName = model.FullName;
        person.CountryID = model.CountryID; // This value is from the DropDownList.

        db.AddToPersons(person);
        db.SaveChanges();

        return RedirectToAction("Index", "Home");       
    }

    // Something went wrong. Redisplay form.
    return View(model);
}

只需将POSTed ID值设置为实体对象的外键属性即可。