【问题标题】:Creat an edit form for each model in an IEnumerable<model> ASP.NET MVC为 IEnumerable<model> ASP.NET MVC 中的每个模型创建一个编辑表单
【发布时间】:2021-04-12 18:09:01
【问题描述】:

我正在尝试为 IEnumerable 的模型中的每个模型创建一个编辑表单。基本上,我的 Index.cshtml 页面有一个包含数据库表中每个对象的表,我想为每个模型添加一个编辑表单。但是,无论出于何种原因,每当我发布一个单独的表单时,数据都会作为 NULL 传递。

这是我所拥有的:

型号:

public partial class Person
{
    public int id { get; set; }
    public string name { get; set; }
}

控制器:

public async Task<IActionResult> Index()
{
    return View(await _context.ASNGFellows.ToListAsync());
}

public async Task<IActionResult> Edit(Person person)
{
    if (ModelState.IsValid)
    {
        #update database object
    }

    return View(Person)
}

查看(Index.cshtml):

@model IEnumerable<Person>

<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.name)
            </th>
            <th class="actionItemsTh">Actions</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.name)
            </td>
            <td>
                <a href="#" class="edit">Edit</a>
            </td>
        </tr>
        <tr>
            <td colspan="5">
                <div>
                    <form method="post" asp-action="Edit">
                        @Html.AntiForgeryToken()
                        @Html.HiddenFor(modelItem => item.id)
                        @Html.ValidationSummary("", new { @class = "text-danger" })
                        <div class="form-group">
                            @Html.LabelFor(modelItem => item.name)
                            @Html.EditorFor(modelItem => item.name)
                            @Html.ValidationMessageFor(modelItem => item.name)
                        </div>
                        <div class="form-group">
                            <input type="submit" value="Save" class="btn btn-primary" />
                        </div>
                    </form>
                </div>
            </td>
        </tr>
        }
    </tbody>
</table>

表单生成正确,当我提交时,它会点击控制器方法,但是 person 对象具有空值。我在这里做错了什么?

【问题讨论】:

    标签: asp.net-mvc asp.net-core-mvc


    【解决方案1】:

    你可以改变你的形式如下。

    <form method="post" asp-action="Edit">
          @Html.AntiForgeryToken()
          <input type="hidden" name="person.id" value="@item.id"/>
          @Html.ValidationSummary("", new { @class = "text-danger" })
        <div class="form-group">
          @Html.LabelFor(modelItem => item.name)
          <input type="text" name="person.name" value="@item.name" />
          @Html.ValidationMessageFor(modelItem => item.name)
        </div>
        <div class="form-group">
           <input type="submit" value="Save" class="btn btn-primary" />
        </div>
    </form>
    

    控制器:

     [HttpPost]
        public async Task<IActionResult> Edit(Person person)
        {
            if (ModelState.IsValid)
            {
            }
    
            return View(person);
      }
    

    【讨论】:

      猜你喜欢
      • 2011-08-14
      • 2023-03-31
      • 2014-11-16
      • 2015-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多