Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.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# 发布到编辑控制器/视图时捕获textarea内容_C#_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 发布到编辑控制器/视图时捕获textarea内容

C# 发布到编辑控制器/视图时捕获textarea内容,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我有一个列表类型的模型,其中ReviewGroupViewModel是: 这是以一个表单为边界的,该表单在单击页面其他位置的“保存”按钮时提交 现在,假设用户在索引视图中的一个或多个文本区域中键入一些文本,然后继续单击给定表行的操作中的编辑。当我只是将Id类型:int传递给我的editcontroller方法时,这个文本就会丢失。问题是,当导航到其他视图进行编辑/删除等操作时,如何避免在索引视图中丢失此审阅对象和所有其他对象的输入文本 另外,您不能直接将复杂对象从视图传递到控制器方法。显然,您也

我有一个列表类型的模型,其中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>