asp.net mvc を使用して複数選択リストを編集するにはどうすればよいですか?
-
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)
}
)%>
所属していません StackOverflow