【问题标题】:how to pass list of object from view to controller in asp.net mvc如何在asp.net mvc中将对象列表从视图传递到控制器
【发布时间】:2021-01-04 15:51:43
【问题描述】:

首先我在 [HttpGet] 操作中创建模型列表并返回视图。

public ActionResult Setting()
{
        var model = db.Settings.ToList();
        return View(model);
}

他们在视图中获取列表并显示良好。 但是在编辑设置值后,我想将对象列表从视图传递到控制器,这不起作用。

@model List<TajerWebsite.Models.Setting>
<!-- Main content -->
<section class="content">
    <div class="container-fluid">
        <div class="row">
            <!-- left column -->
            <div class="col-md-6">
                <!-- general form elements -->
                <div class="card card-primary">
                    <div class="card-header">
                        <h3 class="card-title">تنظیمات</h3>
                    </div>
                    <!-- /.card-header -->
                    <!-- form start -->
                    @using (Html.BeginForm("Setting","Admin", new { FormMethod.Post }))
                    {

                        @Html.AntiForgeryToken()
                        foreach (var item in Model)
                        {
                            <div class="card-body">
                                <div class="form-group">
                                    @Html.HiddenFor(model => item.Id)
                                    <label for="exampleInputPassword1">@item.Name</label>
                                    @Html.EditorFor(model => item.Value, new { htmlAttributes = new { @class = "form-control"} })
                                    @Html.ValidationMessageFor(model => item.Value, "", new { @class = "text-danger" })
                                </div>

                            </div>
                        }

                        <!-- /.card-body -->

                        <div class="card-footer">
                            <button type="submit" class="btn btn-primary">ذخیره</button>

                        </div>
                    }
                </div>
            </div>
        </div>
    </div>
</section>

行动是:

[HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Setting(IEnumerable<Models.Setting> settings)
    {
        db.Entry(settings);
        db.SaveChanges();
        return View(settings);
    }

但设置为空!

【问题讨论】:

    标签: asp.net asp.net-mvc entity-framework razor-pages


    【解决方案1】:

    您不能在视图中使用@foreach 循环来将对象列表传递回控制器,因为这会生成具有相同 ID 和名称的输入元素。

    改为使用标准 for 循环:

    for(int i = 0; i < Model.Count; i++)
    {
        <div class="card-body">
            <div class="form-group">
                @Html.HiddenFor(m => m[i].Id)
                <label for="exampleInputPassword1">@Model[i].Name</label>
                @Html.EditorFor(m => m[i].Value, 
                    new { htmlAttributes = new { @class = "form-control"} })
                @Html.ValidationMessageFor(m => m[i].Value, 
                    new { @class = "text-danger" })
            </div>
        </div>
    }
    

    【讨论】:

    • 谢谢!但是@Model[i].Name OR @Html.DisplayFor(m => m[i].Name) 没有发送值!
    • 您没有将名称放入输入中(当前您将其放在标签中),因此我认为您不需要将其返回服务器。如果您还想保留名称,只需将其放在隐藏的输入中即可。请记住,为了将数据发送回服务器,它们需要在输入中!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多