2014-02-17 55 views
4

我一直在遵循一些列表框的指導,並試圖正確處理選擇。什麼是絆倒我,我似乎無法找到相關材料正在訪問所選的值。可能只有一個選定,但最有可能一次選擇多個。MVC列表框多選只有一個值在控制器上後

我的後控制器正在獲取對象模型,它有一個選定的項目的值,但不是全部?如同其他文章所說,我是否需要在帖子前運行一些jQuery?似乎不正確,但也許......

我的模型:

public partial class ExtrnlSubsModel : BaseEntityModel 
{ 
    public IList<SelectListItem> AvailableForums { get; set; } 
    public int ExtForumId { get; set; } 
} 

我的剃刀:

@Html.ListBoxFor(model => model.ExtForumId, Model.AvailableForums, new { style = "width:500px;height:250px" }) 
@Html.RequiredHint() 
@Html.ValidationMessageFor(model => model.ExtForumId) 

我的控制器:

[HttpPost] 
public ActionResult ExtForumAdd(ExtrnlSubsModel model) 
{ .... } 

因此,正如我提到我的模型儘管按住ctrl點擊了很多項目,但只有一個選擇。

TIA

回答

5

更改模型使用MultiSelect和整數的用於這樣的選擇項的數組(部分爲簡單起見移除):

public class ExtrnlSubsModel 
{ 
    public MultiSelectList AvailableForums { get; set; } 
    public int[] ExtForumIds { get; set; } 
} 

更改列表框此,與整數屬性的陣列的第一:

@Html.ListBoxFor(model => model.ExtForumIds, Model.AvailableForums, new { style = "width:500px;height:250px" }) 

出於測試目的的控制器取得動作:

public ActionResult Index() 
{  
     var items = new List<SelectItem>(); 
     // These items would be set from your db 
     var items = new List<SelectItem>(); 
     items.Add(new SelectItem { Id = 1, Name = "1" }); 
     items.Add(new SelectItem { Id = 2, Name = "2" }); 

     var selectedItems = new List<SelectItem>(); 
     selectedItems.Add(new SelectItem { Id = 1, Name = "1" }); 

     var model = new ExtrnlSubsModel(); 
     // project the selected indexs to an array of ints 
     int[] selectedItemsArray = selectedItems.Select(s => s.Id).ToArray(); 
     model.ExtForumIds = selectedItemsArray; 
     model.AvailableForums = new MultiSelectList(items, "ID", "Name", selectedItemsArray); 

    return View(model); 
} 

帖子行動:

[HttpPost] 
public ActionResult Index(ExtrnlSubsModel model) 
{ 
    var selectedItems = model.ExtForumIds; 
    return View(model); 
} 

我也用一個測試SelectItem的演示,這將是您返回而不是對象:

public class SelectItem 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

所選項目的圖片貼後背如下:

Screen grab

+1

非常感謝你的教育。我對mvc不是很瞭解,而且你的答案非常完整,可以幫助我學習。謝謝! – GPGVM

+0

沒有probs,其餘的好運。 :) – hutchonoid

+0

你的意思是SelectItem或者是一個錯字?我無法找到該類或Google命名空間? – GPGVM

相關問題