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