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

Asp.net 核心表单总是返回 null

如何解决Asp.net 核心表单总是返回 null

我正在尝试构建一个视图,在一个视图中包含所有(创建、编辑、删除和索引),即索引。

问题在于编辑。始终向控制器返回 null,如 gif 所示。

enter image description here

我有 Model 和 viewmodel,如下所示。

模型引导类别

public class BootstrapCategory
{
    [Key]
    public Guid Id { get; set; }

    [MaxLength(20)]
    [required]
    public string Category { get; set; }
}

viewmodel VMBPategoris

public class VMBPCategoris
{
    public List<BootstrapCategory> bootstrapCategories { get; set; }
    public BootstrapCategory bootstrapCategory { get; set; }
}

视图

注意:不要通过表格中的常用按钮进行编辑,而是通过另一个按钮进行编辑 按钮,如 gif 所示

@model VMBPCategoris

        @foreach (var item in Model.bootstrapCategories)
        {
            <tr>
                <td>

                    <form asp-action="Edit" method="post">
                        <input type="hidden" asp-for="@item.Id" />
                        <div class="@item.Id d-none">
                            <div class="input-group">
                                <input id="btnGroupEdit" type="submit" value="Save" class="input-group-text btn btn-primary" />
                                <input asp-for="@item.Category" class="form-control" aria-label="Input group example" aria-describedby="btnGroupEdit">
                            </div>
                            <span asp-validation-for="@item.Category" class="text-danger"></span>
                        </div>
                    </form>

                    <div class="@item.Id">
                        @Html.displayFor(modelItem => item.Category)
                    </div>

                </td>
                <td>
                    <a href="@item.Id" class="ToggleEdit">Edit</a> |
                    <a asp-action="Details" asp-route-id="@item.Id">Details</a> |
                    <a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
                </td>
            </tr>
        }

控制器

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit([Bind("Id,Category")] BootstrapCategory bootstrapCategory)
{

    _context.Update(bootstrapCategory);
    await _context.SaveChangesAsync();

    return RedirectToAction(nameof(Index));
    //return View(vMBPCategoris);
}

解决方法

视图模型类 VMBPCategoris 需要将其成员属性分配给构造函数中的实例:

public class VMBPCategoris
{
    public List<BootstrapCategory> bootstrapCategories { get; set; }
    public BootstrapCategory bootstrapCategory { get; set; }

    public VMBPCategoris()
    {
        bootstrapCategories = new List<BootstrapCategory>();
        bootstrapCategory = new BootstrapCategory();    
    }
} 
,

您可以为输入标签命名。更改您的表单,如下所示。

<form asp-action="Edit" method="post">
        <input type="hidden" asp-for="@item.Id" name="Id"/>
            <div class="@item.Id d-none">
                <div class="input-group">
                     <input id="btnGroupEdit" type="submit" value="Save" class="input-group-text btn btn-primary" />
                     <input asp-for="@item.Category" name="Category" class="form-control" aria-label="Input group example" aria-describedby="btnGroupEdit">
                </div>
                     <span asp-validation-for="@item.Category" class="text-danger"></span>
            </div>
 </form>
,

我通过对 ViewModel 进行一些更改并使用 value 属性从模型中获取值并使用 asp-for 将值设置为另一个模型来制作了一个简单的解决方案。

这一切都在Stackoverflow post

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