2013-06-22 90 views
1

通常當我使用DropDownListFor助手時,我選擇基於ID(int)選擇哪個項目,但現在我有一種情況,我需要顯示哪個項目被選中基於文本(字符串)而不是ID。在該模型是否被正確設置爲我想與這個屬性的值時,控制器:MVC 4 DropDownListFor基於文本設置選定的項目

model.Title 

一個例子標題是「前臺」。我在我的控制器下面的代碼:

ViewBag.Titles = new SelectList(jobTitles, "Name", "Name"); 

,並在視圖上我有這樣的:

@Html.DropDownListFor(model => model.Title, ViewBag.Titles as SelectList) 

DropDownList控件與所有預期職稱正確填充,它只是不選擇根據model.Title正確的職位名稱。我究竟做錯了什麼?

UPDATE:

好像有別的東西可能在我的代碼去錯了,所以我把所有的在這裏看到,如果我做錯了什麼。

控制器:

public ActionResult Edit(int id = 0) 
    { 
     StaffMember staffmember = StaffMember.SelectByID(id); // gets staff member from db 

     ViewBag.Titles = new SelectList(JobTitle.SelectAll(), "Name", "Name", staffmember.Title); // JobTitle.SelectAll() returns List<JobTitle> 

     StaffEditModel model = new StaffEditModel(); 
     model.ID = staffmember.ID; 
     model.ClientID = staffmember.ClientID; 
     model.FirstName = staffmember.FirstName; 
     model.MiddleInitial = staffmember.MiddleInitial; 
     model.LastName = staffmember.LastName; 
     model.Title = staffmember.Title; 
     model.Phone = staffmember.Phone; 
     model.Email = staffmember.Email; 
     model.Birthday = staffmember.Birthday; 
     model.HireDate = staffmember.HireDate; 
     model.Biography = staffmember.Biography; 

     if (staffmember == null) 
     { 
      return HttpNotFound(); 
     } 
     return View(model); 
    } 

型號:

public class StaffEditModel 
{ 
    public int ID { get; set; } 

    public int ClientID { get; set; } 

    [Required] 
    [Display(Name = "First Name")] 
    public string FirstName { get; set; } 

    [Display(Name = "Middle Initial")] 
    public string MiddleInitial { get; set; } 

    [Required] 
    [Display(Name = "Last Name")] 
    public string LastName { get; set; } 

    public string Title { get; set; } // this is the property I'm trying to show in DropDown 

    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
    public string Birthday { get; set; } 

    [Display(Name = "Hire Date")] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
    public string HireDate { get; set; } 

    public string Email { get; set; } 

    [MaxLength(14)] 
    public string Phone { get; set; } 
    public string Biography { get; set; } 
} 

查看:

@Html.DropDownListFor(model => model.Title, new SelectList(ViewBag.Titles,"Value","Text", Model.Title)) 
+0

你的'JobTitle.SelectAll()'返回'列表'?或另一種類型的對象? – Paritosh

回答

3

這應該工作。 您可以通過ViewBag.TitlesList<SelectListItem>從控制器

var jobList = new List<SelectListItem>(); 
foreach (var job in jobTitles) 
{ 
    var item = new SelectListItem(); 
    item.Value = job.PropertyName; //the property you want to display i.e. Title 
    item.Text = job.PropertyName; 
    jobList.Add(item); 
} 
ViewBag.Title = jobList; 

,然後在視圖中,

@Html.DropDownListFor(model => model.Title, new SelectList(ViewBag.Titles,"Value","Text", Model.Title)) 
+0

感謝您的快速回復!我給了這個鏡頭,並傳入一個'List '並在視圖中使用下面的代碼:'@ Html.DropDownListFor(model => model.Title,new SelectList(ViewBag.Titles,「Text」,「文本「,模型。標題))',但得到的結果與我以前沒有選擇我正在尋找的項目相同。對於下拉菜單,**值**和**文本**是相同的。 – Cory

+0

我修改了代碼,它爲我工作。一探究竟。 – Paritosh

+0

再次感謝。在我的代碼中必須有其他事情發生,因爲即使你的更新代碼不適合我。我之前做過這麼多次,但由於某種原因,這是我唯一一次遇到的難題。我將用我的完整代碼更新我的問題,以查看是否有任何不正確的操作。再次感謝你的幫助!我毫不懷疑你的代碼是正確的並且正在工作,我只是在想還有其他事情正在發生。 – Cory

1

我知道我來晚了就這個派對,但我也有類似的問題,我想我會增加我發現的。

我還沒有想出了爲什麼還沒有 - 我還在研究(這就是我在這裏結束了) - 但我認爲這事做的事實,你使用這個詞標題

我已經得到了完全相同的場景,只要我將我的模型更改爲CustomerTitle而不是標題事情按預期工作。

最初的想法是,模型聯編程序發現標題 DOM中的其他地方,並越來越絆倒。完整的猜測。如果我有更多的時間,我會繼續挖掘爲什麼

+0

我也得到了這個確切的情況 - 所以我把我的顧客轉到了CustomerTitle,它工作了......我有興趣知道爲什麼會發生這種情況,如果有人知道... – Kaine

相關問題