ASP.NET MVC下拉列表+保存selectedvalue

时间:2013-06-01 20:33:28

标签: asp.net-mvc view controller html.dropdownlistfor

我想加载一个下拉列表,其中包含从我的mysql数据库收到的值。

这就是我在 ViewModel

中的内容
public int ProjectID { get; set; }
public IEnumerable<SelectListItem> Projects { get; set; }

在我的控制器中创建功能:

public ActionResult Create(DeliverableViewModel model)
    {
        var projects = (repository.GetProjects()).ToList();
        ViewBag.Projects = projects;

        if (ModelState.IsValid)
        {
            try
            {

                repository.AddDeliverable(model.ProjectID);
            }
            catch (ArgumentException ae)
            {
                ModelState.AddModelError("", ae.Message);
            }
            return RedirectToAction("Index");
        }

        return View(model);
    }

我在我的存储库中加载项目。 (值:project_id和project_name)

这是我的创建查看

    @model GDMfrontEnd.Models.DeliverableViewModel

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>

    @using (Html.BeginForm("Create", "Deliverable", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
        @Html.ValidationSummary(true)

            <div class="editor-field">
                 @Html.DropDownListFor(model => model.Projects,
       new SelectList(ViewBag.Projects,
        "project_id", "project_name"))
            </div>
            <p>
                <input type="submit" value="Create" />
            </p>

    }

但是现在,如何将我的ProjectID从选定的值提供给我的存储库?

2 个答案:

答案 0 :(得分:4)

假设:

class DeliverableViewModel 
{
    public int ProjectID { get; set; }
    public IEnumerable<SelectListItem> Projects { get; set; }
}

应该是这样的:

@Html.DropDownListFor(model => model.ProjectID,
    new SelectList(Model.Projects, "project_id", "project_name", Model.ProjectID))

如果您没有初始化此字段,则可以省略最后Model.ProjectID,但您可能会在编辑时使用它。

答案 1 :(得分:0)

在POST操作中检索选定的ProjectID应为model=>model.ProjectID

  @Html.DropDownListFor(model => model.ProjectID,
           new SelectList(ViewBag.Projects,
            "project_id", "project_name"))