0

我有两个课程如下

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 的值。

请问有人可以提供帮助吗?

谢谢。

4

3 回答 3

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”的空项。如果您不想要空文本,请随意删除最后一个参数。

于 2012-07-26T20:04:42.497 回答
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);
}

在视图中,使用DropDownListForHTML Helper 方法。

@model CareerMajor
@Html.BeginForm())
{
   @Html.DropDownListFor(m=>m.ODCTE_MajorId, 
        new SelectList(Model.Majors,"ODCTE_MajorId ","MajorCode"),"select one..")
  //other elements
}
于 2012-07-26T19:53:36.980 回答
0

在您的控制器操作中:

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

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

那么在你看来:

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

whereavailableMajors是一个 IEnumerable,其中包含您要列出的专业。

于 2012-07-26T19:57:04.467 回答