在HTML表ASP.Net MVC上设置ListBox选定值
我在设置HTML表中列表框的选定值时遇到问题。检索所选值不是问题,而是在页面加载时设置其值 HTML:在HTML表ASP.Net MVC上设置ListBox选定值,html,asp.net-mvc,listbox,Html,Asp.net Mvc,Listbox,我在设置HTML表中列表框的选定值时遇到问题。检索所选值不是问题,而是在页面加载时设置其值 HTML: @model MVCSample.Models.SampleViewModel <h2>Index</h2> @using (Html.BeginForm()) { <div class="container-fluid"> <div class="row"> <div class="col-lg-6">
@model MVCSample.Models.SampleViewModel
<h2>Index</h2>
@using (Html.BeginForm())
{
<div class="container-fluid">
<div class="row">
<div class="col-lg-6">
<input type="submit" value="Submit" />
<hr />
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Name</th>
<th>Select</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Details.Count(); i++)
{
@Html.HiddenFor(model => model.Details[i].Name)
<tr>
<td>@Html.DisplayFor(model => model.Details[i].Name)</td>
<td>
@Html.ListBoxFor(model => model.Details[i].Selected, Model.List, new { @class = "form-control", multiple = "multiple" })
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
public SelectList List { get; set; }
public List<SampleDetailsViewModel> Details { get; set; }
}
public class SampleDetailsViewModel
{
public string Name { get; set; }
public string[] Selected { get; set; }
}
}
namespace MVCSample.Controllers
{
public class SampleController : Controller
{
public ActionResult Index()
{
SampleViewModel model = new SampleViewModel();
model.List = new SelectList(new[] { "1", "2", "3" });
model.Details = new List<SampleDetailsViewModel>() {
new SampleDetailsViewModel {
Name="Sample1",
Selected= new[]{"1"}
}
};
return View(model);
}
[HttpPost]
public ActionResult Index(SampleViewModel model)
{
model.List = new SelectList(new[] { "1", "2", "3" });
return View(model);
}
}
}
@using (Html.BeginForm())
{
<div class="container-fluid">
<div class="row">
<div class="col-lg-6">
<input type="submit" value="Submit" />
<hr />
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Name</th>
<th>Select</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Details.Count(); i++)
{
@Html.HiddenFor(model => model.Details[i].Name)
<tr>
<td>@Html.DisplayFor(model => model.Details[i].Name)</td>
<td>
@Html.DropDownListFor(model => model.Details[i].Selected, new SelectList(Model.List, "ID", "Name", Model.Details[i].Selected), new { @class = "form-control", multiple = "multiple" })
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
public IEnumerable<OptionViewModel> List { get; set; }
public List<SampleDetailsViewModel> Details { get; set; }
}
public class OptionViewModel
{
public string ID { get; set; }
public string Name { get; set; }
}
public class SampleDetailsViewModel
{
public string Name { get; set; }
public OptionViewModel Selected { get; set; }
}
public class SampleController : Controller
{
public ActionResult Index()
{
SampleViewModel model = new SampleViewModel();
model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
model.Details = new List<SampleDetailsViewModel>() {
new SampleDetailsViewModel {
Name="Sample1",
Selected = new OptionViewModel() { ID = "1", Name = "1" }
}
};
return View(model);
}
[HttpPost]
public ActionResult Index(SampleViewModel model)
{
model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
return View(model);
}
}
@model MVCSample.Models.SampleViewModel
指数
@使用(Html.BeginForm())
{
名称
挑选
@for(int i=0;imodel.Details[i].Name)
@Html.DisplayFor(model=>model.Details[i].Name)
@Html.ListBoxFor(model=>model.Details[i]。选中,model.List,新建{@class=“form control”,multiple=“multiple”})
}
}
型号:
@model MVCSample.Models.SampleViewModel
<h2>Index</h2>
@using (Html.BeginForm())
{
<div class="container-fluid">
<div class="row">
<div class="col-lg-6">
<input type="submit" value="Submit" />
<hr />
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Name</th>
<th>Select</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Details.Count(); i++)
{
@Html.HiddenFor(model => model.Details[i].Name)
<tr>
<td>@Html.DisplayFor(model => model.Details[i].Name)</td>
<td>
@Html.ListBoxFor(model => model.Details[i].Selected, Model.List, new { @class = "form-control", multiple = "multiple" })
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
public SelectList List { get; set; }
public List<SampleDetailsViewModel> Details { get; set; }
}
public class SampleDetailsViewModel
{
public string Name { get; set; }
public string[] Selected { get; set; }
}
}
namespace MVCSample.Controllers
{
public class SampleController : Controller
{
public ActionResult Index()
{
SampleViewModel model = new SampleViewModel();
model.List = new SelectList(new[] { "1", "2", "3" });
model.Details = new List<SampleDetailsViewModel>() {
new SampleDetailsViewModel {
Name="Sample1",
Selected= new[]{"1"}
}
};
return View(model);
}
[HttpPost]
public ActionResult Index(SampleViewModel model)
{
model.List = new SelectList(new[] { "1", "2", "3" });
return View(model);
}
}
}
@using (Html.BeginForm())
{
<div class="container-fluid">
<div class="row">
<div class="col-lg-6">
<input type="submit" value="Submit" />
<hr />
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Name</th>
<th>Select</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Details.Count(); i++)
{
@Html.HiddenFor(model => model.Details[i].Name)
<tr>
<td>@Html.DisplayFor(model => model.Details[i].Name)</td>
<td>
@Html.DropDownListFor(model => model.Details[i].Selected, new SelectList(Model.List, "ID", "Name", Model.Details[i].Selected), new { @class = "form-control", multiple = "multiple" })
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
public IEnumerable<OptionViewModel> List { get; set; }
public List<SampleDetailsViewModel> Details { get; set; }
}
public class OptionViewModel
{
public string ID { get; set; }
public string Name { get; set; }
}
public class SampleDetailsViewModel
{
public string Name { get; set; }
public OptionViewModel Selected { get; set; }
}
public class SampleController : Controller
{
public ActionResult Index()
{
SampleViewModel model = new SampleViewModel();
model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
model.Details = new List<SampleDetailsViewModel>() {
new SampleDetailsViewModel {
Name="Sample1",
Selected = new OptionViewModel() { ID = "1", Name = "1" }
}
};
return View(model);
}
[HttpPost]
public ActionResult Index(SampleViewModel model)
{
model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
return View(model);
}
}
namespace MVCSample.Models
{
公共类SampleViewModel
{
公共选择列表{get;set;}
公共列表详细信息{get;set;}
}
公共类示例详细信息视图模型
{
公共字符串名称{get;set;}
公共字符串[]已选择{get;set;}
}
}
控制器:
@model MVCSample.Models.SampleViewModel
<h2>Index</h2>
@using (Html.BeginForm())
{
<div class="container-fluid">
<div class="row">
<div class="col-lg-6">
<input type="submit" value="Submit" />
<hr />
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Name</th>
<th>Select</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Details.Count(); i++)
{
@Html.HiddenFor(model => model.Details[i].Name)
<tr>
<td>@Html.DisplayFor(model => model.Details[i].Name)</td>
<td>
@Html.ListBoxFor(model => model.Details[i].Selected, Model.List, new { @class = "form-control", multiple = "multiple" })
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
public SelectList List { get; set; }
public List<SampleDetailsViewModel> Details { get; set; }
}
public class SampleDetailsViewModel
{
public string Name { get; set; }
public string[] Selected { get; set; }
}
}
namespace MVCSample.Controllers
{
public class SampleController : Controller
{
public ActionResult Index()
{
SampleViewModel model = new SampleViewModel();
model.List = new SelectList(new[] { "1", "2", "3" });
model.Details = new List<SampleDetailsViewModel>() {
new SampleDetailsViewModel {
Name="Sample1",
Selected= new[]{"1"}
}
};
return View(model);
}
[HttpPost]
public ActionResult Index(SampleViewModel model)
{
model.List = new SelectList(new[] { "1", "2", "3" });
return View(model);
}
}
}
@using (Html.BeginForm())
{
<div class="container-fluid">
<div class="row">
<div class="col-lg-6">
<input type="submit" value="Submit" />
<hr />
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Name</th>
<th>Select</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Details.Count(); i++)
{
@Html.HiddenFor(model => model.Details[i].Name)
<tr>
<td>@Html.DisplayFor(model => model.Details[i].Name)</td>
<td>
@Html.DropDownListFor(model => model.Details[i].Selected, new SelectList(Model.List, "ID", "Name", Model.Details[i].Selected), new { @class = "form-control", multiple = "multiple" })
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
public IEnumerable<OptionViewModel> List { get; set; }
public List<SampleDetailsViewModel> Details { get; set; }
}
public class OptionViewModel
{
public string ID { get; set; }
public string Name { get; set; }
}
public class SampleDetailsViewModel
{
public string Name { get; set; }
public OptionViewModel Selected { get; set; }
}
public class SampleController : Controller
{
public ActionResult Index()
{
SampleViewModel model = new SampleViewModel();
model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
model.Details = new List<SampleDetailsViewModel>() {
new SampleDetailsViewModel {
Name="Sample1",
Selected = new OptionViewModel() { ID = "1", Name = "1" }
}
};
return View(model);
}
[HttpPost]
public ActionResult Index(SampleViewModel model)
{
model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
return View(model);
}
}
namespace MVCSample.Controllers
{
公共类SampleController:控制器
{
公共行动结果索引()
{
SampleViewModel模型=新的SampleViewModel();
model.List=newselectlist(new[]{“1”、“2”、“3”});
model.Details=新列表(){
新样本详细信息视图模型{
Name=“Sample1”,
选定=新[]{“1”}
}
};
返回视图(模型);
}
[HttpPost]
公共行动结果索引(SampleViewModel模型)
{
model.List=newselectlist(new[]{“1”、“2”、“3”});
返回视图(模型);
}
}
}
如您所见,在声明model.Details的值时,我将所选值设置为1
但在下图中,页面加载后未选择任何值
目标:能够在页面加载时设置HTML表格上ListBox的选定值。
建议的解决方案:
@model MVCSample.Models.SampleViewModel
<h2>Index</h2>
@using (Html.BeginForm())
{
<div class="container-fluid">
<div class="row">
<div class="col-lg-6">
<input type="submit" value="Submit" />
<hr />
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Name</th>
<th>Select</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Details.Count(); i++)
{
@Html.HiddenFor(model => model.Details[i].Name)
<tr>
<td>@Html.DisplayFor(model => model.Details[i].Name)</td>
<td>
@Html.ListBoxFor(model => model.Details[i].Selected, Model.List, new { @class = "form-control", multiple = "multiple" })
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
public SelectList List { get; set; }
public List<SampleDetailsViewModel> Details { get; set; }
}
public class SampleDetailsViewModel
{
public string Name { get; set; }
public string[] Selected { get; set; }
}
}
namespace MVCSample.Controllers
{
public class SampleController : Controller
{
public ActionResult Index()
{
SampleViewModel model = new SampleViewModel();
model.List = new SelectList(new[] { "1", "2", "3" });
model.Details = new List<SampleDetailsViewModel>() {
new SampleDetailsViewModel {
Name="Sample1",
Selected= new[]{"1"}
}
};
return View(model);
}
[HttpPost]
public ActionResult Index(SampleViewModel model)
{
model.List = new SelectList(new[] { "1", "2", "3" });
return View(model);
}
}
}
@using (Html.BeginForm())
{
<div class="container-fluid">
<div class="row">
<div class="col-lg-6">
<input type="submit" value="Submit" />
<hr />
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Name</th>
<th>Select</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Details.Count(); i++)
{
@Html.HiddenFor(model => model.Details[i].Name)
<tr>
<td>@Html.DisplayFor(model => model.Details[i].Name)</td>
<td>
@Html.DropDownListFor(model => model.Details[i].Selected, new SelectList(Model.List, "ID", "Name", Model.Details[i].Selected), new { @class = "form-control", multiple = "multiple" })
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
public IEnumerable<OptionViewModel> List { get; set; }
public List<SampleDetailsViewModel> Details { get; set; }
}
public class OptionViewModel
{
public string ID { get; set; }
public string Name { get; set; }
}
public class SampleDetailsViewModel
{
public string Name { get; set; }
public OptionViewModel Selected { get; set; }
}
public class SampleController : Controller
{
public ActionResult Index()
{
SampleViewModel model = new SampleViewModel();
model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
model.Details = new List<SampleDetailsViewModel>() {
new SampleDetailsViewModel {
Name="Sample1",
Selected = new OptionViewModel() { ID = "1", Name = "1" }
}
};
return View(model);
}
[HttpPost]
public ActionResult Index(SampleViewModel model)
{
model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
return View(model);
}
}
查看:
@model MVCSample.Models.SampleViewModel
<h2>Index</h2>
@using (Html.BeginForm())
{
<div class="container-fluid">
<div class="row">
<div class="col-lg-6">
<input type="submit" value="Submit" />
<hr />
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Name</th>
<th>Select</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Details.Count(); i++)
{
@Html.HiddenFor(model => model.Details[i].Name)
<tr>
<td>@Html.DisplayFor(model => model.Details[i].Name)</td>
<td>
@Html.ListBoxFor(model => model.Details[i].Selected, Model.List, new { @class = "form-control", multiple = "multiple" })
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
public SelectList List { get; set; }
public List<SampleDetailsViewModel> Details { get; set; }
}
public class SampleDetailsViewModel
{
public string Name { get; set; }
public string[] Selected { get; set; }
}
}
namespace MVCSample.Controllers
{
public class SampleController : Controller
{
public ActionResult Index()
{
SampleViewModel model = new SampleViewModel();
model.List = new SelectList(new[] { "1", "2", "3" });
model.Details = new List<SampleDetailsViewModel>() {
new SampleDetailsViewModel {
Name="Sample1",
Selected= new[]{"1"}
}
};
return View(model);
}
[HttpPost]
public ActionResult Index(SampleViewModel model)
{
model.List = new SelectList(new[] { "1", "2", "3" });
return View(model);
}
}
}
@using (Html.BeginForm())
{
<div class="container-fluid">
<div class="row">
<div class="col-lg-6">
<input type="submit" value="Submit" />
<hr />
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Name</th>
<th>Select</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Details.Count(); i++)
{
@Html.HiddenFor(model => model.Details[i].Name)
<tr>
<td>@Html.DisplayFor(model => model.Details[i].Name)</td>
<td>
@Html.DropDownListFor(model => model.Details[i].Selected, new SelectList(Model.List, "ID", "Name", Model.Details[i].Selected), new { @class = "form-control", multiple = "multiple" })
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
public IEnumerable<OptionViewModel> List { get; set; }
public List<SampleDetailsViewModel> Details { get; set; }
}
public class OptionViewModel
{
public string ID { get; set; }
public string Name { get; set; }
}
public class SampleDetailsViewModel
{
public string Name { get; set; }
public OptionViewModel Selected { get; set; }
}
public class SampleController : Controller
{
public ActionResult Index()
{
SampleViewModel model = new SampleViewModel();
model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
model.Details = new List<SampleDetailsViewModel>() {
new SampleDetailsViewModel {
Name="Sample1",
Selected = new OptionViewModel() { ID = "1", Name = "1" }
}
};
return View(model);
}
[HttpPost]
public ActionResult Index(SampleViewModel model)
{
model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
return View(model);
}
}
@使用(Html.BeginForm())
{
名称
挑选
@for(int i=0;imodel.Details[i].Name)
@Html.DisplayFor(model=>model.Details[i].Name)
@Html.DropDownListFor(model=>model.Details[i]。选中,新建SelectList(model.List,“ID”,“Name”,model.Details[i]。选中),新建{@class=“form control”,multiple=“multiple”})
}
}
型号:
@model MVCSample.Models.SampleViewModel
<h2>Index</h2>
@using (Html.BeginForm())
{
<div class="container-fluid">
<div class="row">
<div class="col-lg-6">
<input type="submit" value="Submit" />
<hr />
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Name</th>
<th>Select</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Details.Count(); i++)
{
@Html.HiddenFor(model => model.Details[i].Name)
<tr>
<td>@Html.DisplayFor(model => model.Details[i].Name)</td>
<td>
@Html.ListBoxFor(model => model.Details[i].Selected, Model.List, new { @class = "form-control", multiple = "multiple" })
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
public SelectList List { get; set; }
public List<SampleDetailsViewModel> Details { get; set; }
}
public class SampleDetailsViewModel
{
public string Name { get; set; }
public string[] Selected { get; set; }
}
}
namespace MVCSample.Controllers
{
public class SampleController : Controller
{
public ActionResult Index()
{
SampleViewModel model = new SampleViewModel();
model.List = new SelectList(new[] { "1", "2", "3" });
model.Details = new List<SampleDetailsViewModel>() {
new SampleDetailsViewModel {
Name="Sample1",
Selected= new[]{"1"}
}
};
return View(model);
}
[HttpPost]
public ActionResult Index(SampleViewModel model)
{
model.List = new SelectList(new[] { "1", "2", "3" });
return View(model);
}
}
}
@using (Html.BeginForm())
{
<div class="container-fluid">
<div class="row">
<div class="col-lg-6">
<input type="submit" value="Submit" />
<hr />
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Name</th>
<th>Select</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Details.Count(); i++)
{
@Html.HiddenFor(model => model.Details[i].Name)
<tr>
<td>@Html.DisplayFor(model => model.Details[i].Name)</td>
<td>
@Html.DropDownListFor(model => model.Details[i].Selected, new SelectList(Model.List, "ID", "Name", Model.Details[i].Selected), new { @class = "form-control", multiple = "multiple" })
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
public IEnumerable<OptionViewModel> List { get; set; }
public List<SampleDetailsViewModel> Details { get; set; }
}
public class OptionViewModel
{
public string ID { get; set; }
public string Name { get; set; }
}
public class SampleDetailsViewModel
{
public string Name { get; set; }
public OptionViewModel Selected { get; set; }
}
public class SampleController : Controller
{
public ActionResult Index()
{
SampleViewModel model = new SampleViewModel();
model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
model.Details = new List<SampleDetailsViewModel>() {
new SampleDetailsViewModel {
Name="Sample1",
Selected = new OptionViewModel() { ID = "1", Name = "1" }
}
};
return View(model);
}
[HttpPost]
public ActionResult Index(SampleViewModel model)
{
model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
return View(model);
}
}
namespace MVCSample.Models
{
公共类SampleViewModel
{
公共IEnumerable列表{get;set;}
公共列表详细信息{get;set;}
}
公共类选项视图模型
{
公共字符串ID{get;set;}
公共字符串名称{get;set;}
}
公共类示例详细信息视图模型
{
公共字符串名称{get;set;}
公共选项ViewModel已选择{get;set;}
}
}
控制器:
@model MVCSample.Models.SampleViewModel
<h2>Index</h2>
@using (Html.BeginForm())
{
<div class="container-fluid">
<div class="row">
<div class="col-lg-6">
<input type="submit" value="Submit" />
<hr />
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Name</th>
<th>Select</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Details.Count(); i++)
{
@Html.HiddenFor(model => model.Details[i].Name)
<tr>
<td>@Html.DisplayFor(model => model.Details[i].Name)</td>
<td>
@Html.ListBoxFor(model => model.Details[i].Selected, Model.List, new { @class = "form-control", multiple = "multiple" })
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
public SelectList List { get; set; }
public List<SampleDetailsViewModel> Details { get; set; }
}
public class SampleDetailsViewModel
{
public string Name { get; set; }
public string[] Selected { get; set; }
}
}
namespace MVCSample.Controllers
{
public class SampleController : Controller
{
public ActionResult Index()
{
SampleViewModel model = new SampleViewModel();
model.List = new SelectList(new[] { "1", "2", "3" });
model.Details = new List<SampleDetailsViewModel>() {
new SampleDetailsViewModel {
Name="Sample1",
Selected= new[]{"1"}
}
};
return View(model);
}
[HttpPost]
public ActionResult Index(SampleViewModel model)
{
model.List = new SelectList(new[] { "1", "2", "3" });
return View(model);
}
}
}
@using (Html.BeginForm())
{
<div class="container-fluid">
<div class="row">
<div class="col-lg-6">
<input type="submit" value="Submit" />
<hr />
<table class="table table-striped table-bordered table-hover">
<thead>
<tr>
<th>Name</th>
<th>Select</th>
</tr>
</thead>
<tbody>
@for (int i = 0; i < Model.Details.Count(); i++)
{
@Html.HiddenFor(model => model.Details[i].Name)
<tr>
<td>@Html.DisplayFor(model => model.Details[i].Name)</td>
<td>
@Html.DropDownListFor(model => model.Details[i].Selected, new SelectList(Model.List, "ID", "Name", Model.Details[i].Selected), new { @class = "form-control", multiple = "multiple" })
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
}
namespace MVCSample.Models
{
public class SampleViewModel
{
public IEnumerable<OptionViewModel> List { get; set; }
public List<SampleDetailsViewModel> Details { get; set; }
}
public class OptionViewModel
{
public string ID { get; set; }
public string Name { get; set; }
}
public class SampleDetailsViewModel
{
public string Name { get; set; }
public OptionViewModel Selected { get; set; }
}
public class SampleController : Controller
{
public ActionResult Index()
{
SampleViewModel model = new SampleViewModel();
model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
model.Details = new List<SampleDetailsViewModel>() {
new SampleDetailsViewModel {
Name="Sample1",
Selected = new OptionViewModel() { ID = "1", Name = "1" }
}
};
return View(model);
}
[HttpPost]
public ActionResult Index(SampleViewModel model)
{
model.List = new OptionViewModel[] { new OptionViewModel() { ID = "1", Name = "1" }, new OptionViewModel() { ID = "2", Name = "2" } };
return View(model);
}
}
公共类示例控制器:控制器
{
公共行动结果索引()
{
SampleViewModel模型=新的SampleViewModel();
model.List=newoptionviewmodel[]{newoptionviewmodel(){ID=“1”,Name=“1”},newoptionviewmodel(){ID=“2”,Name=“2”};
model.Details=新列表(){
新样本详细信息视图模型{
Name=“Sample1”,
Selected=newoptionViewModel(){ID=“1”,Name=“1”}
}
};
返回视图(模型);
}
[HttpPost]
公共行动结果索引(SampleViewModel模型)
{
model.List=newoptionviewmodel[]{newoptionviewmodel(){ID=“1”,Name=“1”},newoptionviewmodel(){ID=“2”,Name=“2”};
返回视图(模型);
}
}
不幸的是,ListBoxFor()和DropDownListFor()在for循环中不能正常工作。给出两种可能的解决方案-使用自定义的编辑器或模板
处理样本详细信息视图模型
的类型,并将选择列表
作为附加视图数据传递到模板,或在循环的每次迭代中创建新的多选择列表
根据您的编辑,您尝试了第二个选项,但是您的代码包含一些错误
只能绑定到值类型数组(而不是复杂对象(在您的情况下是选项ViewModel
)。将视图模型更改为
public class SampleDetailsViewModel
{
public string Name { get; set; }
// public OptionViewModel Selected { get; set; }
public string[] Selected { get; set; } // change this
}
初始化视图模型时在控制器中
model.Details = new List<SampleDetailsViewModel>()
{
new SampleDetailsViewModel
{
Name="Sample1",
// Selected = new OptionViewModel() { ID = "1", Name = "1" },
Selected = new string[] { "1" } // change this
}
};
不幸的是,ListBoxFor()和DropDownListFor()是在for循环中无法正常工作。给出了两种可能的解决方案-对typeofSampleDetailsViewModel
使用自定义的EditorTemplate
,并将SelectList
作为附加视图数据传递给模板,或在循环的每次迭代中创建一个新的MultiSelectList
根据您的编辑,您尝试了第二个选项,但是您的代码包含一些错误
只能绑定到值类型数组(而不是复杂对象)(在您的示例中是选项ViewModel