Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC5将模型项从视图传递到控制器_C#_.net_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

C# MVC5将模型项从视图传递到控制器

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

我正在使用.Net MVC5,我正在尝试创建一个带有编辑链接(或按钮)的索引视图,该链接将发布(因此我不能使用ActionLink)视图中显示的实体列表中的整个模型项实体。我该怎么做

我的代码(到目前为止)如下

@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)
{
}