1

我是 MVC3 的新手,正在尝试学习一些东西。使用 Razor 视图引擎。mysql数据库。我有一张桌子,用来保存公司(companyID、companyName 等)。我有一个具有相同属性的模型:

public class CompanyModel{
    public int companyID;
    public string companyName;
    ......
    ....
}

我想创建一个包含公司的下拉列表,向我显示公司名称,当我选择一个项目时,我需要能够访问 companyID。我可以查询该表并在公司列表中包含所有行:

List<Company> companies = new List<Company>();
companies = getCompanies();

但我不知道如何将此列表与下拉列表绑定,以及如何在从我的控制器调用 post 方法后获取所选值。

任何帮助,将不胜感激。

4

1 回答 1

2

您可以使用视图模型:

public class MyViewModel
{
    [DisplayName("Company")]
    public int CompanyId { get; set; }
    public IEnumerable<SelectListItem> Companies { get; set; }
}

然后让您的控制器操作实例化、填充并将此视图模型传递给视图:

public class CompaniesController: Controller
{
    public ActionResult Index()
    {
        List<Company> companies = getCompanies();

        var model = new MyViewModel();
        model.Companies = companies.Select(x => new SelectListItem
        {
            Value = x.companyID.ToString(),
            Text = x.companyName
        });
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        // model.CompanyId will contain the selected value here

        return Content(
            string.Format("You have selected company id: {0}", model.CompanyId)
        );
    }
}

最后是一个强类型视图,您可以在其中呈现包含下拉列表的 HTML 表单:

@model MyViewModel
@using (Html.BeginForm())
{
    @Html.LabelFor(x => x.CompanyId)
    @Html.DropDownListFor(x => x.CompanyId, Model.Companies)
    <button type="submit">OK</button>
}
于 2012-08-05T16:27:04.493 回答