2011-05-20 98 views
0

當我使用從實體框架和設計器自動創建控制器/模型/視圖時,我得到一個相當乾淨的編輯表單。 1對1關係中的一個會創建一個下拉列表,向用戶顯示來自特定列的值,但我希望它能夠使用另一列/屬性。覆蓋下拉列表(MVC3,實體框架)的視圖列

這是如何完成的?

(僅供參考,我不希望在MVVM類,以及如何在一個視圖模型隔離這一點。我沒有學習和重新創建視圖模型類此應用程序的帶寬。)

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

控制器:

public ActionResult Edit(int id) 
    { 
     ClientJob clientjob = db.ClientJobs.Find(id); 
     ViewBag.ClientId = new SelectList(db.Clients, "Id", "ClientName", clientjob.ClientId); 
     ViewBag.CurrencyType = new SelectList(db.CurrencyTypes, "Id", "TypeName", clientjob.CurrencyType); 
     ViewBag.Domain = new SelectList(db.Domains, "Id", "DomainName", clientjob.Domain); 
     ViewBag.JobType = new SelectList(db.JobTypes, "Id", "JobTypeName", clientjob.JobType); 
     ViewBag.DatabaseServer = new SelectList(db.Servers, "Id", "ServerName", clientjob.DatabaseServer); 
     ViewBag.ProcessingServer = new SelectList(db.Servers, "Id", "ServerName", clientjob.ProcessingServer); 
     ViewBag.QueryServer = new SelectList(db.Servers, "Id", "ServerName", clientjob.QueryServer); 
     return View(clientjob); 
    } 
+0

我想我只是回答了我的問題...... LOL – 2011-05-20 22:49:40

+0

看到我的答案,或者我的編輯 – 2011-05-20 22:53:24

回答

0

自動生成的代碼剛創建的選擇列表:

ViewBag.Domain = new SelectList(db.Domains, "Id", "DomainName", clientjob.Domain); 

我只是需要在選擇列表的更改列名:

ViewBag.Domain = new SelectList(db.Domains, "Id", "DomainType", clientjob.Domain); 
1

如果我正確理解你的問題,你想傳遞的項目列表顯示,而不是默認?

我不喜歡這樣寫道:

<div class="editor-label"> 
    @Html.LabelFor(model => model.Domain, "Domain1") 
</div> 
<div class="editor-field"> 
    @Html.DropDownListfor(model => model.Domain, ViewData["DomainSelects"] as IEnumerable<SelectListItem>, "Select domain") 
    @Html.ValidationMessageFor(model => model.Domain) 
</div> 

然後在你的控制器,一定要設置在視圖中的數據DomainSelects。 SelectListItem的value屬性是應爲「domain」設置的值。所以如果它是FK,它將是一個ID。

我用這樣的代碼(僞代碼)

ViewData["DomainSelects"] = domains.Select(domain => new SelectListItem() { Value = SqlFunctions.StringConvert((double)domain.Id), Text = domain.Name}); 
+0

試圖解決方案現在 – 2011-05-20 22:24:43

+0

當它試圖標識integet轉換爲字符串,我得到一個錯誤,我最近的評論.. ??? – 2011-05-20 22:37:44

+0

您是否在創建SelectListItem時應用了「ToString」?你在哪一行得到錯誤? – 2011-05-20 22:39:05

0

在您的控制器中,準備好整個列表

ViewBag.YourTypeCollection = context.YourTypes.ToList(); 

並在視圖

@Html.DropDownListFor(m => m.Domain, 
    new SelectList((IEnumerable<YourType>)ViewBag.YourTypeCollection, 
    "Id", 
    "Name", 
    Model.Domain==null?1:Model.Domain.Id)) 

Id是類ID字段和名稱是要顯示的領域。將這些值替換爲適合您的模型的值。在我的例子中,如果模型的值爲空,我選擇第一個項目。