POST 模型(DTO)与列表到控制器
POST Model(DTO) with List to controller
我的项目是 MVC.Net 带有 Razor 页面的核心项目。
我的 Dto class:
public class TicketDto
{
public Guid Id { get; set; }
public IList<KeyValuePair<int, string>> Areas { get; set; }
}
在视图中我使用@Html.ListBoxFor
创建了select列表
@Html.ListBoxFor(model => model.Areas, (MultiSelectList)ViewBag.AreaId, new { @class="custom-select", @id="inputGroupSelect01", size = 5 })
查看还有ViewData/ViewBag:
ViewData["AreaId"] = new MultiSelectList(areaService.GetAreas().Select( a => new { a.Id, a.Name }), "Id", "Name");
下一个 Razor 渲染:
<select class="custom-select" id="inputGroupSelect01" multiple="multiple" name="Areas" size="5"><option value="1">A</option>
<option value="2">P</option>
<option value="3">S</option>
<option value="10">AB</option>
<option value="11">AB</option>
</select>
image of select list
Controller 取 TicketDto:
public IActionResult Create(TicketDto ticketDto)
当我 select 多个项目和 POST 形成控制器时 ticketDto.Areas count = 0
我应该如何 post 模型 class 与 List 和 @Html.ListBoxFor 选择我的控制器?
Multiselectlist 将 post 默认情况下通过选定值的数组。如果你想获得所有选中的项目,可以这样做:
public class MyData
{
public string Id { get; set; }
public string Value { get; set; }
}
public class MyViewModel
{
public int[] SelectedIds { get; set; }
public IEnumerable<SelectListItem> Items { get; set; }
}
public IActionResult Index()
{
var data = new List<MyData>
{
new MyData() {Id = "2", Value = "P"}, new MyData() {Id = "3", Value = "S"},
new MyData() {Id = "10", Value = "AB"}
};
var model = new MyViewModel
{
Items = data.Select(x => new SelectListItem
{
Value = x.Id,
Text = x.Value
})
};
return View(model);
}
public IActionResult Create(MyViewModel model)
@using (Html.BeginForm("Create", "Home", FormMethod.Post))
{
@Html.ListBoxFor(x => x.SelectedIds, Model.Items)
<p><input type="submit" value="Submit" /></p>
}
谢谢
我的项目是 MVC.Net 带有 Razor 页面的核心项目。
我的 Dto class:
public class TicketDto
{
public Guid Id { get; set; }
public IList<KeyValuePair<int, string>> Areas { get; set; }
}
在视图中我使用@Html.ListBoxFor
创建了select列表@Html.ListBoxFor(model => model.Areas, (MultiSelectList)ViewBag.AreaId, new { @class="custom-select", @id="inputGroupSelect01", size = 5 })
查看还有ViewData/ViewBag:
ViewData["AreaId"] = new MultiSelectList(areaService.GetAreas().Select( a => new { a.Id, a.Name }), "Id", "Name");
下一个 Razor 渲染:
<select class="custom-select" id="inputGroupSelect01" multiple="multiple" name="Areas" size="5"><option value="1">A</option>
<option value="2">P</option>
<option value="3">S</option>
<option value="10">AB</option>
<option value="11">AB</option>
</select>
image of select list
Controller 取 TicketDto:
public IActionResult Create(TicketDto ticketDto)
当我 select 多个项目和 POST 形成控制器时 ticketDto.Areas count = 0
我应该如何 post 模型 class 与 List 和 @Html.ListBoxFor 选择我的控制器?
Multiselectlist 将 post 默认情况下通过选定值的数组。如果你想获得所有选中的项目,可以这样做:
public class MyData
{
public string Id { get; set; }
public string Value { get; set; }
}
public class MyViewModel
{
public int[] SelectedIds { get; set; }
public IEnumerable<SelectListItem> Items { get; set; }
}
public IActionResult Index()
{
var data = new List<MyData>
{
new MyData() {Id = "2", Value = "P"}, new MyData() {Id = "3", Value = "S"},
new MyData() {Id = "10", Value = "AB"}
};
var model = new MyViewModel
{
Items = data.Select(x => new SelectListItem
{
Value = x.Id,
Text = x.Value
})
};
return View(model);
}
public IActionResult Create(MyViewModel model)
@using (Html.BeginForm("Create", "Home", FormMethod.Post))
{
@Html.ListBoxFor(x => x.SelectedIds, Model.Items)
<p><input type="submit" value="Submit" /></p>
}
谢谢