2013-05-20 64 views
0

我一直有這個麻煩,一直沒能找到一種方法來解決我的問題......選擇數值

我有一個選擇列表,我希望允許用戶選擇多個,我正在使用ASP.NET。在最初選擇它們之後,我希望它們能夠稍後編輯它們的選擇。在使用ListBoxFor時,填寫所選值時遇到問題。我猜測問題在於MultiSelectList。

我試過使用數組,列表和字典來包含選定的值,但是在它生成的頁面上沒有任何選擇。通過使用斷點並拆分代碼以便我可以看到MultiSelectList,似乎SelectedValues屬性總是與傳遞給構造函數的內容相同。

型號:

public class UniversityStrategicGoalsModel 
{ 
    public Dictionary<string, string> goals { get; set; } 

    public UniversityStrategicGoalsModel() 
    { 
     goals = new Dictionary<string, string>() 
     { 
      {"NA", "Not Applicable"}, 
      {"1.1","1.1 blah blah blah"}, 
      {"1.2","1.2 and many more strategic goals"} 
     }; 
    } 
} 

控制器:

ProjectViewModel viewModel = new ProjectViewModel(); 
viewModel.Project = db.Projects.Find(id); // Gets unique project 
viewModel.allGoals = new UniversityStrategicGoalsModel(); 
return View(viewModel); 

查看:

@Html.ListBoxFor(model => model.Project.UniversityGoals, new MultiSelectList(Model.allGoals.goals, "Key", "Value", Model.Project.UniversityGoals.Split(',')) 
// An example of model.Project.UniversityGoals could be "1.1,1.2" 

在此之後(使用對象而不是字典的列表)並沒有幫助:http://ittecture.wordpress.com/2009/04/30/tip-of-the-day-198-asp-net-mvc-listbox-controls/

我也嘗試製作字典的克隆,但只使用我想要的項目,並在我選擇的對象位於數組中(並再次在列表中)時傳遞值(而不是鍵)數組。

+0

我編輯了你的標題。請參見「[應的問題包括‘標籤’,在他們的頭銜?(http://meta.stackexchange.com/questions/19190/)」,這裏的共識是「不,他們不應該」。 –

+0

對不起,我沒有太多的使用Stack Overflow。這看起來像我的標題是如此普遍,以便正確命名標籤是必要的。我事先想到了這一點,而且我可能本不應該第二次猜測自己。唉,現在我知道這個命名約定:D – Pluto

+0

你當然可以改進標題。 _about_「ListBox中的選定值」是什麼? –

回答

2

基本模型綁定需要兩個屬性。一個用於填充列表框,另一個用於保存選定的列表框。

public class UniversityStrategicGoalsModel 
{ 
    public Dictionary<string, string> Goals { get; set; } 
    public IEnumerable<string> SelectedGoals { get; set; } 


    public UniversityStrategicGoalsModel() 
    { 
     Goals = new Dictionary<string, string>() 
     { 
      {"NA", "Not Applicable"}, 
      {"1.1","1.1 blah blah blah"}, 
      {"1.2","1.2 and many more strategic goals"} 
     }; 
    } 
} 

然後創建列表框:

Html.ListBoxFor(model => model.SelectedGoals , 
       new MultiSelectList(Model.Goals, "Key", "Value")) 

我這裏簡化模型,你的想法。

+0

問題是Model.SelectedGoals是一個字符串(它是強類型基於數據庫的內容),這就是爲什麼我使用String.Split函數來獲取選定的值。 – Pluto

+0

@Pluto您可以在創建模型之前拆分它並將值分配給SelectedGoals屬性。這也會使這種邏輯脫離視野。 –

+0

Eh這意味着它會有一個新的名字,並在語義上改變列表框中的數據源,但至少它使我得到了一些有用的東西。在這種情況下,我只是使用SelectList而不是MultiSelect列表。 – Pluto