asp.net mvc を使用して複数選択リストを編集するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/995073

  •  13-09-2019
  •  | 
  •  

質問

以下のようなオブジェクトを編集したいと思います。UsersSelectedList に UsersGrossList の 1 人以上のユーザーを入力したいと考えています。

mvc の標準の編集ビューを使用すると、マッピングされた文字列とブール値 (以下には示されていません) のみが取得されます。Google で見つけた例の多くは mvc フレームワークの初期リリースを利用していますが、私は公式 1.0 リリースを使用しています。

ビューの例をいただければ幸いです。

public class NewResultsState
{
    public IList<User> UsersGrossList { get; set; }
    public IList<User> UsersSelectedList { get; set; }
}
役に立ちましたか?

解決

Html.ListBox を IEnumerable SelectListItem と組み合わせて使用​​する

ビュー

         <% using (Html.BeginForm("Category", "Home",
      null,
      FormMethod.Post))
       { %>  
        <%= Html.ListBox("CategoriesSelected",Model.CategoryList )%>

        <input type="submit" value="submit" name="subform" />
        <% }%>

コントローラー/モデル:

        public List<CategoryInfo> GetCategoryList()
    {
        List<CategoryInfo> categories = new List<CategoryInfo>();
        categories.Add( new CategoryInfo{ Name="Beverages", Key="Beverages"});
        categories.Add( new CategoryInfo{ Name="Food", Key="Food"});
        categories.Add(new CategoryInfo { Name = "Food1", Key = "Food1" });
        categories.Add(new CategoryInfo { Name = "Food2", Key = "Food2" });
        return categories;
    }

    public class ProductViewModel
    {
        public IEnumerable<SelectListItem> CategoryList { get; set; }
        public IEnumerable<string> CategoriesSelected { get; set; }

    }
    public ActionResult Category(ProductViewModel model )
    {
      IEnumerable<SelectListItem> categoryList =
                                from category in GetCategoryList()
                                select new SelectListItem
                                {
                                    Text = category.Name,
                                    Value = category.Key,
                                    Selected = (category.Key.StartsWith("Food"))
                                };
      model.CategoryList = categoryList;

      return View(model);
    }

他のヒント

Userモデルはidとnameプロパティを持っていると仮定します:

<%= Html.ListBox("users", Model.UsersGrossList.Select(
    x => new SelectListItem {
        Text = x.Name,
        Value = x.Id,
        Selected = Model.UsersSelectedList.Any(y => y.Id == x.Id)
    }
) %>

またはビューモデルと

public class ViewModel {
    public Model YourModel;
    public IEnumerable<SelectListItem> Users;
}

コントローラーます:

var usersGrossList = ...
var model = ...

var viewModel = new ViewModel {
    YourModel = model;
    Users = usersGrossList.Select(
        x => new SelectListItem {
            Text = x.Name,
            Value = x.Id,
            Selected = model.UsersSelectedList.Any(y => y.Id == x.Id)
        }
    }

表示:

<%= Html.ListBox("users", Model.Users ) %>

@ EU-GE-NE <ありがとうあなたの答えのためにそんなに - 本物のトラブルから値のリストを複数選択し、モデル化する方法を見つけることを持っていました。 私は私の編集/更新]ページでListBoxFor HTMLコントロールを使用し、保存を(値を選択mulisple含む)戻って私のコントローラにモデル全体を渡されたコードを使用します。

<%= Html.ListBoxFor(model => model, Model.UsersGrossList.Select( 
x => new SelectListItem { 
    Text = x.Name, 
    Value = x.Id, 
    Selected = Model.UsersSelectedList.Any(y => y.Id == x.Id) 
} 

)%>

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top