2011-02-01 10 views
2

このDropDownListForの動作を確認していますが、成功していません。
私のコントローラは、私がデータベースで見つかったすべてのグループを置くSelectListItemsのリストを作成します。ASP.NET MVC2:DropDownListForが複数選択+モデルバインダーで正常に動作しない

viewModel.Groups = LoadGroups(viewModel.User.AssociatedGroups); 

これは方法それ:あなたがそこにあれば、私が選択した要素を設定見ることができるように

private IList<SelectListItem> LoadGroups(List<String> associatedGroups) 
{ 
    var groups = _SecurityService 
      .LoadGroups() 
      .Select(e => new SelectListItem 
      { 
       Selected = associatedGroups.Contains<System.String>(e.Id.ToString()), 
       Value = e.Id.ToString(), 
       Text = e.Name 
      }).ToList(); 
    return (groups); 
} 

をリスト内の関連するグループです。 私は私のカスタムのviewmodelのフィールド(グループ)にこのリストを置く:

public class UsersViewModel 
    { 
     public UsersViewModel() 
     { 
      this.Groups = new List<SelectListItem>(); 
     } 
     public Models.User User { get; set; } 
     public IList<SelectListItem> Groups { get; set; } 
    } 

をし、ビューにUsersViewModelを送ります。 (私のviewmodelのメンバーである)は、クラスのユーザーフィールドで

<%=Html.DropDownListFor(m => m.User.AssociatedGroups, (List<System.Web.Mvc.SelectListItem>)Model.Groups, new { @class = "dropDownGroups", multiple = "multiple" })%> 

AssociatedGroups:

public List<String> AssociatedGroups { get; set; } 

独特のものはここにありません、私は複数選択してドロップダウンを構築するために、このコードを使用します。 このコードを使用すると、選択したドロップダウンの要素が表示されないことがあります(属性が設定されていますが、二重にチェックされています)が、フォームを投稿するときに選択をAssociatedGroupsとバインドできます。 私は文字列でAssociatedGroups(Userクラスのフィールド)を変更した場合:

public String AssociatedGroups { get; set; } 

私は反対の行動があります

を私がチェックし、ドロップダウンの要素を見ることはできませんが、私は、フォームを投稿する際に何がありますか結合、またはそれ以上の場合、1つの要素のみが結合されます。 私は一日のうちに問題の原因を解明しようと多くの時間を費やしましたが、私はさまざまな組み合わせを試みましたが、どれもうまくいかないようです。 私を助けることができる人はいますか?

ありがとうございました。

public class UsersViewModel 
{ 
    public IEnumerable<SelectListItem> Groups { get; set; } 
    public IEnumerable<string> SelectedGroupIds { get; set; } 
} 

、その後、あなたが複数の選択肢を可能にするためにListBoxForヘルパーを使用します。リストが含まれます選択したグループIDが含まれています1と1:

答えて

3

はあなたのビューモデル上の2つのプロパティを必要とします:

<%= Html.ListBoxFor(
    m => m.SelectedGroupIds, 
    new SelectList(Model.Groups, "Value", "Text"), 
    new { @class = "dropDownGroups" } 
) %> 

今すぐ次のビューモデルを仮定すると、ビューに渡されます。

public ActionResult Index() 
{ 
    var model = new UsersViewModel 
    { 
     // TODO: Use a repository to fetch those values 
     // and map them to the view model 
     Groups = new[] 
     { 
      new SelectListItem { Value = "1", Text = "group 1" }, 
      new SelectListItem { Value = "2", Text = "group 2" }, 
      new SelectListItem { Value = "3", Text = "group 3" }, 
     }, 
     // We want to preselect the last two groups in the listbox 
     SelectedGroupIds = new[] { "2", "3" } 
    }; 
    return View(model); 
} 

[HttpPost] 
public ActionResult Index(IEnumerable<string> selectedGroupIds) 
{ 
    // Here we will get the list of selected ids 
    // when the form containing the listbox is 
    // submitted 
    ... 
} 

次に、ビューの最後の2つの要素が自動的に事前選択されます。

+0

ありがとうございましたDarin、私はSelectListのDropDownListForを変更しただけで役に立ちました。私はそれを貼り付けたようにすべての残りを保った、それは素晴らしい動作します。ありがとう。 – LeftyX

+0

@vandalo、それは多分あなたは受け入れられたとして答えをマークできますか? –

+0

申し訳ありませんダーリン、私は忘れてしまった! – LeftyX

関連する問題