微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

表单不会根据POST请求绑定到模型

如何解决表单不会根据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>&nbsp;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>&nbsp;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();
}

结果:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。