C# 发布到编辑控制器/视图时捕获textarea内容
我有一个列表类型的模型,其中ReviewGroupViewModel是: 这是以一个表单为边界的,该表单在单击页面其他位置的“保存”按钮时提交 现在,假设用户在索引视图中的一个或多个文本区域中键入一些文本,然后继续单击给定表行的操作中的编辑。当我只是将Id类型:int传递给我的editcontroller方法时,这个文本就会丢失。问题是,当导航到其他视图进行编辑/删除等操作时,如何避免在索引视图中丢失此审阅对象和所有其他对象的输入文本C# 发布到编辑控制器/视图时捕获textarea内容,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我有一个列表类型的模型,其中ReviewGroupViewModel是: 这是以一个表单为边界的,该表单在单击页面其他位置的“保存”按钮时提交 现在,假设用户在索引视图中的一个或多个文本区域中键入一些文本,然后继续单击给定表行的操作中的编辑。当我只是将Id类型:int传递给我的editcontroller方法时,这个文本就会丢失。问题是,当导航到其他视图进行编辑/删除等操作时,如何避免在索引视图中丢失此审阅对象和所有其他对象的输入文本 另外,您不能直接将复杂对象从视图传递到控制器方法。显然,您也
另外,您不能直接将复杂对象从视图传递到控制器方法。显然,您也不能嵌套HTML表单。当然这是一个常见的场景,但我如何在代码中处理它?您的问题是ActionLink。它生成一个简单的超链接。超链接将向服务器发送GET请求。并且不能将复杂对象放入GET请求的主体中 您需要这样做:
应该将“for”循环中的代码放入编辑器模板中
@using (Html.BeginForm("Save", "Review", FormMethod.Post))
{
for (var i = 0; i < Model.Count; i++)
{
@Html.EditorFor(m => Model[i], "MyTemplateName");
}
}
在视图文件夹中创建一个名为EditorTemplates的文件夹,并创建一个名为MyTemplateName的视图。在它里面,通过向视图传递单个模型,您可以获得迭代中每个项目的代码
MyTemplateName.cshtml
希望这些信息能对您有所帮助。谢谢George,他被MyTemplateName.cshtml中的@model Review甩了。我相信在我的例子中应该是@model ReviewGroupViewModel?在MySecondTemplate中,我将向控制器传递什么?我仍然无法传递对象,对吗?但这是一个编辑表单,您正在编辑Commentation属性,为什么要导航到新视图以再次编辑它?
@using (Html.BeginForm("Save", "Review", FormMethod.Post))
{
for (var i = 0; i < Model.Count; i++)
{
<h6>@Html.DisplayFor(m => m[i].Country)</h6>
<table class="table table-bordered table-condensed">
<tr>
<th style="text-align: center">
@Html.DisplayNameFor(m => m[i].Reviews[0].Commentary)
</th>
<th style="text-align: center">
Actions
</th>
</tr>
@for (var j = 0; j < Model[i].Reviews.Count; j++)
{
<tr>
<td style="text-align: center">
@Html.TextAreaFor(m => m[i].Reviews[j].Commentary)
</td>
<td style="text-align: center">
@Html.ActionLink("Edit", "Edit", new { tempId = Model[i].Reviews[j].TempId }) |
@Html.ActionLink("Delete", "Delete", new { tempId = Model[i].Reviews[j].TempId })
</td>
</tr>
}
</table>
}
}
@using (Html.BeginForm("Save", "Review", FormMethod.Post))
{
for (var i = 0; i < Model.Count; i++)
{
@Html.EditorFor(m => Model[i], "MyTemplateName");
}
}
@model Review
<h6>@Html.DisplayFor(m => m.Country)</h6>
<table class="table table-bordered table-condensed">
<tr>
<th style="text-align: center">
@Html.DisplayNameFor(m => m.Reviews[0].Commentary)
</th>
<th style="text-align: center">
Actions
</th>
</tr>
@for (var j = 0; j < m.Reviews.Count; j++)
{
// Here you should have different editor template... see the pattern :)
@Html.EditorFor(m => m.Reviews[j], "MySecondTemplate")
}
</table>