Asp.net core 视图在提交时发布空对象,但需要修改的对象

Asp.net core 视图在提交时发布空对象,但需要修改的对象,asp.net-core,asp.net-core-mvc,Asp.net Core,Asp.net Core Mvc,我有一个视图,允许用户编辑从数据库获取并转换为数据表的数据(为了简单起见,因为数据可能变得非常复杂和深入) 问题是,当我将数据发回负责的控制器时,控制器接收到DataTable对象,但它是空的,例如,用户所做的更改永远不会返回到控制器,并且无法保存到数据库 我至多是网络编程的中级,所以我喜欢直接的答案或直接的指示 视图: 这是你的问题 如果运行程序并使用开发人员工具检查为输入字段生成的html,您将注意到生成的html属性 您应该特别注意的是name属性 向控制器发送数据时,模型绑定在.net

我有一个视图,允许用户编辑从数据库获取并转换为数据表的数据(为了简单起见,因为数据可能变得非常复杂和深入)

问题是,当我将数据发回负责的控制器时,控制器接收到DataTable对象,但它是空的,例如,用户所做的更改永远不会返回到控制器,并且无法保存到数据库

我至多是网络编程的中级,所以我喜欢直接的答案或直接的指示

视图:

这是你的问题

如果运行程序并使用开发人员工具检查为输入字段生成的html,您将注意到生成的html属性

您应该特别注意的是
name
属性

向控制器发送数据时,模型绑定在
.net core
中的工作方式

public IActionResult DoSomething(模型){…}

您需要将名称属性与对象的属性相匹配。例如:

因此,您将得到
var-level=model.level
level
将是
8999

因此,在使用
asp for
时,您必须小心,因为它不会像您想象的那样承担太多的繁重任务。始终检查生成的html

PS

不要使用
DataTables
,其他开发人员会向你扔石头。不要懒散地映射到实际对象或使用ORM,如果您使用它们动态存储数据,程序很快就会变得无法维护。

这是您的问题

如果运行程序并使用开发人员工具检查为输入字段生成的html,您将注意到生成的html属性

您应该特别注意的是
name
属性

向控制器发送数据时,模型绑定在
.net core
中的工作方式

public IActionResult DoSomething(模型){…}

您需要将名称属性与对象的属性相匹配。例如:

因此,您将得到
var-level=model.level
level
将是
8999

因此,在使用
asp for
时,您必须小心,因为它不会像您想象的那样承担太多的繁重任务。始终检查生成的html

PS


不要使用
DataTables
,其他开发人员会向你扔石头。不要懒散地映射到实际对象或使用ORM,如果您使用程序动态存储数据,程序很快就会变得无法维护。

您是将ASP.NET与.NET Framework一起使用,还是与.NET Core一起使用?您的标记与.NET Framework版本相关,但您的某些语法(例如使用
asp for
)看起来像.NET Core。我的错,是的,它是.NET Core。让我更新一下。您是将ASP.NET与.NET Framework一起使用,还是与.NET Core一起使用?您的标记与.NET Framework版本相关,但您的某些语法(例如使用
asp for
)看起来像.NET Core。我的错,是的,它是.NET Core。让我更新一下。
@model System.Data.DataTable
@{
    ViewData["Title"] = "Edit";
    Layout = "~/Views/Shared/_LayoutAdminlte.cshtml";
}


@using (Html.BeginForm("EditSave", "Recipe", FormMethod.Post, new { @id = "Properties-Form" }))
{
    @Html.AntiForgeryToken()
    <div class="form-horizontal">
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            <h2>@Html.DisplayFor(m => Model.TableName)</h2>

        </div>
        <div class="box box-primary">
            <table id="Properties" class="table table-condensed">
                <thead>
                    <tr>
                        @foreach (System.Data.DataColumn col in Model.Columns)
                        {
                            <th>
                                @Html.DisplayFor(m => col.Caption)
                            </th>
                        }
                    </tr>
                </thead>
                <tbody>
                    @foreach (System.Data.DataRow row in Model.Rows)
                    {
                        <tr>
                            @foreach (var cell in row.ItemArray)
                            {
                                <td>
                                    @if (row.ItemArray.ToList().IndexOf(cell) == 0)
                                    {
                                        @cell.ToString()
                                    }
                                    else
                                    {
                                        <input asp-for="@cell" />
                                    }

                                </td>
                            }
                        </tr>
                    }
                </tbody>
            </table>
        </div>
        <div class="box-footer">
            <!--  id="Save" -->
            <input class="btn btn-primary pull-right" type="submit" value="Spara" id="Save" />
            <a href="/Recipe/detail/@Model.TableName" class="btn btn-default"><i class="fa fa-show"></i> Visa</a>
            <a href="/Recipe/Edit/@Model.TableName" class="btn btn-primary"><i class="fa fa-show"></i> Avbryt</a>
        </div>
    </div>
}


@section Scripts{
    @await Html.PartialAsync("_ValidationScriptsPartial")

}