2012-07-26 161 views
0

我有两个类如下选择值来填充html.dropdownlist

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

    ... More unrelated code .... 
} 

AND

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

有人可以提供这方面的帮助吗?

谢谢。

回答

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作为文本实际显示在菜单中。它将设置所选值(如果有),并将空项目与文本“选择一个”添加到菜单的顶部。如果您不想要空文本,请随意将最终论点提出来。

+1

这工作。我再次看了一眼,无法理解为什么我一开始就没有看到这一点。漫长的一天... :) – Erik 2012-07-27 22:29:18

0

让你的视图模型举行Collection属性来表示所有可用的专业(用于poulating下拉)

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 
} 
0

在你的控制器动作:

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

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

然后在您的视图:

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

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