2012-07-26 154 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。