如何将视图从局部视图帖子返回到Controller?

时间:2012-09-28 19:03:45

标签: asp.net-mvc-3 asp.net-mvc-partialview ajax.beginform

所以我有一个局部视图“_Customer”,带有一个文本框和一个保存按钮。目前,部分视图代码,我有这个:

@model CompositeViews.Models.Customer

@using (Ajax.BeginForm("Edit", "Customer", new AjaxOptions { HttpMethod = "Post",     InsertionMode = InsertionMode.Replace, UpdateTargetId = "customerDiv" }))
{
<div id="customerDiv">
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Customer</legend>

        @Html.HiddenFor(model => model.CustomerId)

        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div>

        <p><input type="submit" value="Save" /></p>
    </fieldset>
</div>
}

视图与名为index的父视图一起存在(它还提供了部分视图所依赖的模型):

@model CompositeViews.ViewModels.CompositeViewModel
<h2>Index</h2>
@Html.Partial("_Customer", Model.Customer)

父视图名为Index.cshtml,由一个简单的控制器动作提供。当我在局部视图中单击“保存”按钮时,它将转到相应控制器上的相应操作,但我不太确定如何将更新的模型数据返回到局部视图中。

在所有示例中,它是一个执行异步发布的表单,但UpdateTargetId的目标是一个然后填充了某种类型的更新内容。这似乎很简单直接。

我正在努力的是如何使用现有视图(_Customer)使用更新的模型信息返回相同的表单。基本上,它是一个BeginForm,它以控制器动作的结果为目标,而不是其他不属于表单的div。

我不想手工重建_Customer视图通过MVC框架为我做的所有HTML,并返回它进行渲染。我想我在部分视图中坚持将表单提交给控制器,然后需要一种方法让同一个视图在从action方法返回时重新绘制。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我希望我能帮到你,你希望在帖子上显示你的最新消息。 在这种情况下,你可以试试这个:

<div id="customerDiv">
  @Html.RenderAction("Edit", "Customer", Model)
</div>

并将@using (Ajax.BeginForm())放入编辑结果中。