如何解决表单不会根据POST请求绑定到模型
这是我的观点:
<form asp-action="SaveAssignments">
<input type="hidden" asp-for="@Model.CreatedUser" />
<div class="card m-5">
<div class="card-header">
<div class="container d-md-inline-flex justify-content-between">
<div class="form-group">
<h2><label asp-for="Stores" class="form-control-label"></label></h2>
<button data-toggle="dropdown" type="button" class="btn btn-lg btn-outline-secondary text-bold dropdown-toggle">@Model.Stores.FirstOrDefault(s => s.Value == Model.SelectedStoreId.ToString())?.Text<span class="caret"></span></button>
<div class="dropdown-menu">
@foreach (var item in Model.Stores)
{
<a class="dropdown-item" asp-controller="Web" asp-action="Assignments" asp-route-storeId="@item.Value" asp-route-groupId="@Model.SelectedGroupId">@item.Text</a>
}
</div>
</div>
<div class="form-group align-content-center">
<h2><label asp-for="Groups" class="form-control-label"></label></h2>
<button data-toggle="dropdown" type="button" class="btn btn-lg btn-outline-secondary text-bold dropdown-toggle">@Model.Groups.FirstOrDefault(s => s.Value == Model.SelectedGroupId.ToString())?.Text<span class="caret"></span></button>
<div class="dropdown-menu">
@foreach (var item in Model.Groups)
{
<a class="dropdown-item" asp-controller="Web" asp-action="Assignments" asp-route-storeId="@Model.SelectedStoreId" asp-route-groupId="@item.Value">@item.Text</a>
}
</div>
</div>
<div class="form-group align-self-end">
<button type="submit" class="btn btn-primary btn-lg"><i class="fa fa-save"></i> Save</button>
</div>
</div>
</div>
<div class="card-body">
<div class="row">
<div class="form-group col-md-5">
<h2><label asp-for="ListZoneFrom" class="form-control-label"></label></h2>
<select id="from" asp-for="ListZoneFrom" asp-items="Model.ListZoneFrom" size="15" class="form-control" style="width:100%"></select>
</div>
<div class="form-group col-md-5">
<h2><label asp-for="ListZoneto" class="form-control-label"></label></h2>
<select id="to" asp-for="SelectedZoneto" asp-items="Model.ListZoneto" size="15" class="form-control" style="width:100%"></select>
</div>
</div>
</div>
</div>
</form>
这是我的模特:
public class Assignmentsviewmodel
{
public Assignmentsviewmodel()
{
Groups = new List<SelectListItem>();
ListZoneFrom = new List<SelectListItem>();
SelectedZoneto = new List<int>();
ListZoneto = new List<SelectListItem>();
}
public int SelectedStoreId { get; set; }
public int SelectedGroupId { get; set; }
public List<SelectListItem> Groups { get; set; }
[display(Name = "From: ")]
public List<SelectListItem> ListZoneFrom { get; set; }
[display(Name = "To: ")]
public List<SelectListItem> ListZoneto { get; set; }
public List<int> SelectedZoneto { get; set; }
public string CreatedUser { get; set; }
public IEnumerable<SelectListItem> Stores {get; set;}
}
当我提交表单(HttpPost)时,绑定的唯一参数是CreatedUser,其余参数为null或0。我的问题是如何将List ListZoneto中的值绑定到List SelectedZoneto?每次发布时,我都会在该列表中得到0个项目。我在做什么错了?
<select id="to" asp-for="SelectedZoneto" asp-items="Model.ListZoneto" size="15" class="form-control" style="width:100%"></select>
谢谢
解决方法
我测试了您的代码,效果很好,我可以将ListZoneTo
中的值绑定到SelectedZoneTo
。
问题可能出在您的控制器动作上,您能告诉我们代码吗?
下面是测试示例:
查看:
@model AssignmentsViewModel
<form asp-action="SaveAssignments" asp-controller="Web">
<input type="hidden" asp-for="@Model.CreatedUser" />
<div class="card m-5">
<div class="card-header">
<div class="container d-md-inline-flex justify-content-between">
<div class="form-group">
<h2><label asp-for="Stores" class="form-control-label"></label></h2>
<button data-toggle="dropdown" type="button" class="btn btn-lg btn-outline-secondary text-bold dropdown-toggle">@Model.Stores.FirstOrDefault(s => s.Value == Model.SelectedStoreId.ToString())?.Text<span class="caret"></span></button>
<div class="dropdown-menu">
@foreach (var item in Model.Stores)
{
<a class="dropdown-item" asp-controller="Web" asp-action="Assignments" asp-route-storeId="@item.Value" asp-route-groupId="@Model.SelectedGroupId">@item.Text</a>
}
</div>
</div>
<div class="form-group align-content-center">
<h2><label asp-for="Groups" class="form-control-label"></label></h2>
<button data-toggle="dropdown" type="button" class="btn btn-lg btn-outline-secondary text-bold dropdown-toggle">@Model.Groups.FirstOrDefault(s => s.Value == Model.SelectedGroupId.ToString())?.Text<span class="caret"></span></button>
<div class="dropdown-menu">
@foreach (var item in Model.Groups)
{
<a class="dropdown-item" asp-controller="Web" asp-action="Assignments" asp-route-storeId="@Model.SelectedStoreId" asp-route-groupId="@item.Value">@item.Text</a>
}
</div>
</div>
<div class="form-group align-self-end">
<button type="submit" class="btn btn-primary btn-lg"><i class="fa fa-save"></i> Save</button>
</div>
</div>
</div>
<div class="card-body">
<div class="row">
<div class="form-group col-md-5">
<h2><label asp-for="ListZoneFrom" class="form-control-label"></label></h2>
<select id="from" asp-for="ListZoneFrom" asp-items="Model.ListZoneFrom" size="15" class="form-control" style="width:100%"></select>
</div>
<div class="form-group col-md-5">
<h2><label asp-for="ListZoneTo" class="form-control-label"></label></h2>
<select id="to" asp-for="SelectedZoneTo" asp-items="Model.ListZoneTo" size="15" class="form-control" style="width:100%"></select>
</div>
</div>
</div>
</div>
</form>
控制器:
public IActionResult Index()
{
var listZoneTo = new List<SelectListItem>
{
new SelectListItem{ Text = "AA",Value = "1"},new SelectListItem{ Text = "BB",Value = "2"},new SelectListItem{ Text = "CC",Value = "3"},};
var listZoneFrom = new List<SelectListItem>
{
new SelectListItem{ Text = "aa",new SelectListItem{ Text = "bb",new SelectListItem{ Text = "cc",};
var stores = new List<SelectListItem>
{
new SelectListItem{ Text = "Store1",new SelectListItem{ Text = "Store2",new SelectListItem{ Text = "Store3",};
var groups = new List<SelectListItem>
{
new SelectListItem{ Text = "Group1",new SelectListItem{ Text = "Group2",new SelectListItem{ Text = "Group3",};
var model = new AssignmentsViewModel();
model.CreatedUser = "ABC";
model.SelectedStoreId = 1;
model.SelectedGroupId = 2;
model.ListZoneFrom = listZoneFrom;
model.ListZoneTo = listZoneTo;
model.Groups = groups;
model.Stores = stores;
return View(model);
}
[HttpPost]
public IActionResult SaveAssignments(AssignmentsViewModel model)
{
return View();
}
结果:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。