C# MVC5将模型项从视图传递到控制器
我正在使用.Net MVC5,我正在尝试创建一个带有编辑链接(或按钮)的索引视图,该链接将发布(因此我不能使用ActionLink)视图中显示的实体列表中的整个模型项实体。我该怎么做 我的代码(到目前为止)如下C# MVC5将模型项从视图传递到控制器,c#,.net,asp.net-mvc,asp.net-mvc-5,C#,.net,Asp.net Mvc,Asp.net Mvc 5,我正在使用.Net MVC5,我正在尝试创建一个带有编辑链接(或按钮)的索引视图,该链接将发布(因此我不能使用ActionLink)视图中显示的实体列表中的整个模型项实体。我该怎么做 我的代码(到目前为止)如下 @model IEnumerable 指数 @ActionLink(“新建”、“创建”) @DisplayNameFor(model=>model.Name) 你好 生活是美好的 @foreach(模型中的var项目){ @DisplayFor(modelItem=>item.Nam
@model IEnumerable
指数
@ActionLink(“新建”、“创建”)
@DisplayNameFor(model=>model.Name)
你好
生活是美好的
@foreach(模型中的var项目){
@DisplayFor(modelItem=>item.Name)
@使用(Html.BeginForm(“编辑”、“编辑”、FormMethod.Post))
{
@隐藏(mytem=>item);
}
@ActionLink(“详细信息”,“详细信息”,新的{id=item.PrimeKey})|
@ActionLink(“删除”,“删除”,新的{id=item.PrimeKey})
}
我假设有一种更好的方法,而不是为实体的每个属性创建一个隐藏字段。您需要将要编辑或更改的项放入表单中
<form class="form-horizontal" action="GetItemsFromView" method="post">
<input type="text" name="EditedModelItem">
</form>
之后,您可以通过调用控制器中的任何编辑项
string hold=Request.Form[“EditedModelItem”];
在GetItemsFromView方法中。您需要将要编辑或更改的项放入表单中
<form class="form-horizontal" action="GetItemsFromView" method="post">
<input type="text" name="EditedModelItem">
</form>
之后,您可以通过调用控制器中的任何编辑项
string hold=Request.Form[“EditedModelItem”];
在GetItemsFromView方法中。将所有内容包装到:
@using (Html.BeginForm("Edit", "Edit", FormMethod.Post))
{
}
然后:
或:
把所有东西都包起来:
@using (Html.BeginForm("Edit", "Edit", FormMethod.Post))
{
}
然后:
或:
只传递myItem的ID/主键,并在将其传递到编辑视图时从数据库中重新检索该项。为什么传递整个模型,只传递IDdo@AWinkle通常我会这样做,但由于我使用的是Azure表,因此仅在查询中指定行键(主键)将导致不希望的完整表扫描。所以我尽量避免它。@JOW从我的知识和下面的答案来看,我认为你必须把所有的东西都隐藏在一个隐藏的字段中。由于这是在视图渲染过程中进行的,因此可以使用JSON序列化程序(例如NewtonSoft)将对象序列化为单个隐藏字段。这将限制模型更改的风险,并使编码更容易,尽管对每个字段使用HiddenFor的性能可能不如使用HiddenFor。首先,不能使用
foreach
循环为集合生成表单控件(请参阅。其次,查看在@html.Hidden(mytem=>项)中生成的html)
要理解为什么这永远不起作用(您需要为模型中的每个属性生成一个输入)。只需传递ID
属性。只需传递myItem的ID/主键,并在将其传递到编辑视图时从数据库中重新检索项目。为什么要传递整个模型,只传递IDdo@AWinkle通常我会这样做,但因为我使用的是Azure表,所以只指定行键(主键)在查询中,将导致不希望的完整表扫描。因此,我正在尽可能避免这种情况。@JOW根据我的知识和下面的答案,我认为您必须将所有内容包装在隐藏字段中。因为这是在视图呈现过程中,您可以使用JSON序列化程序(例如NewtonSoft)将对象序列化到单个隐藏字段中。这将限制模型更改的风险,并使编码更容易,但其性能可能不如为每个字段使用HiddenFor。首先,您不能使用foreach
循环为集合生成表单控件(请参阅。其次,查看您在@html.Hidden(mytem=>项)中生成的html;
以了解为什么这永远无法工作(您需要为模型中的每个属性生成输入)。只需传递ID
属性即可。
public ActionResult Edit(FormCollection formCollection)
{
}