2010-01-05 117 views
6

我想知道我可以如何綁定我的表單值到我的強類型的多選框中的視圖。asp.net mvc強類型與多選視圖模型

很顯然,當表單提交多選框時,將提交一個被選中的值的字符串...將這個值的字符串轉換回附加到我的模型的對象列表的最佳方法是什麼更新?

public class MyViewModel { 
    public List<Genre> GenreList {get; set;} 
    public List<string> Genres { get; set; } 
} 

當更新我的控制器內部模型我使用的UpdateModel象下面這樣:

Account accountToUpdate = userSession.GetCurrentUser(); 
UpdateModel(accountToUpdate); 

不過,我需要從字符串某種方式得到的值回對象。

我相信它可能與模型粘合劑有關,但我找不到任何明確的例子來說明如何做到這一點。

謝謝! Paul

回答

3

你是正確的,模型活頁夾是要走的路。試試這個......

using System.ComponentModel; 
using System.ComponentModel.DataAnnotations; 
using System.Web.Mvc; 

[ModelBinder(typeof(MyViewModelBinder))] 
public class MyViewModel { 
    .... 
} 

public class MyViewModelBinder : DefaultModelBinder { 
    protected override void SetProperty(ControllerContext context, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value) { 
     if (propertyDescriptor.Name == "Genres") { 
      var arrVals = ((string[])value)[0].Split(','); 
      base.SetProperty(context, bindingContext, propertyDescriptor, new List<string>(arrVals)); 
     } 
     else 
      base.SetProperty(context, bindingContext, propertyDescriptor, value); 
    } 
} 
0

檢查出Phil Haacks blog post關於這個問題。我用它作爲最近項目中多選擇強類型視圖的基礎。

+0

haack的帖子是關於綁定的對象列表,而不是列表框...... – 2012-08-23 20:13:43

相關問題