选择要填充html.dropdownlist的值

时间:2012-07-26 19:43:45

标签: asp.net-mvc-3

我有两个课程如下

public class ODCTE_Major
{
    public int    ODCTE_MajorId { get; set; }
    public string OfficialMajorName      { get; set; }
    public string MajorCode { get; set; }

    ... More unrelated code ....
}

public class CareerMajor
{
    ...lots of unrealted code to this question left out

    public int ODCTE_MajorId { get; set; }
    public virtual ODCTE_Major ODCTE_Major { get; set; }


}

我添加了一个带有CRUD方法的控制器,并在create.cshtml中有这一行

<div class="editor-field">
    @Html.DropDownList("ODCTE_MajorId", String.Empty)
    @Html.ValidationMessageFor(model => model.ODCTE_MajorId)
</div>

选择列表使用ODCTE_Major中的OfficialMajorName填充它。我需要使用选择列表填充MajorCode或看起来像MajorCode的值 - OfficialMajorName。

有人可以提供协助吗?

感谢。

3 个答案:

答案 0 :(得分:1)

将此添加到ODCTE_Major:

public string MajorDisplayName
{
    get { return string.Format("{0} - {1}", MajorCode, OfficialMajorName); }
}

这只是一个只读属性,用于以您希望菜单使用的格式创建显示文本。

然后在CareerMajor中添加:

public IEnumerable<ODCTE_Major> Majors{ set; get; } // Thank you Shyju!

这将为您在视图模型中提供一个位置,以便将菜单中所需的专业列表传递给视图。

然后在您的操作方法中,当您创建一个CareerMajor视图模型以发送到视图时,使用您希望在菜单中显示的ODCTE_Major实体填充新的IEnumberable。

在视图页面上:

@Html.DropDownListFor(m => m.ODCTE_MajorId, new SelectList(Model.Majors, "ODCTE_MajorId", "MajorDisplayName", Model.ODCTE_MajorId), "Select One")

这会创建一个SelectList来填充下拉列表。 SelectList构造函数使用ODCTE_MajorId作为菜单中SelectListItem的值,并使用MajorDisplayName作为实际显示在菜单中的文本。它设置所选的值(如果有),并在菜单顶部添加带有“Select One”文本的空项。如果你不想要空文本,请随意拿出最后的论点。

答案 1 :(得分:0)

让您的ViewModel持有Collection属性来代表所有可用的专业(用于打印下拉列表)

public class CareerMajor
{  
  //other proiperties
   public int ODCTE_MajorId { get; set; }
   public IEnumerable<ODCTE_Major> Majors{ set; get; }
} 

在您的GET操作中,填写并将其发送到强类型视图

pubilc ACtionResult Create()
{
  var viewModel=new CareerMajor();
  viewModel.Majors=db.GetllAllMajors();  // getting a list of ODCTE_Major objects
  return View(viewModel);
}

并在视图中,使用DropDownListFor HTML帮助程序方法。

@model CareerMajor
@Html.BeginForm())
{
   @Html.DropDownListFor(m=>m.ODCTE_MajorId, 
        new SelectList(Model.Majors,"ODCTE_MajorId ","MajorCode"),"select one..")
  //other elements
}

答案 2 :(得分:0)

在您的控制器操作中:

ViewBag.ODCTE_MajorId = new SelectList(availableMajors, "ODCTE_MajorId", "MajorCode");

*第二个和第三个参数分别是值和文本字段的名称

然后在你看来:

 @Html.DropDownList("ODCTE_MajorId", String.Empty)

其中availableMajors是包含您要列出的专业的IEnumerable。