提交Ajax.Beginform后更新部分视图

时间:2013-02-10 18:51:00

标签: c# ajax asp.net-mvc asp.net-mvc-4 partial-views

我是.NET mvc的新手。

在“DisplayThings”视图中,我有类似的内容:

@foreach (var thing in Model)
{
    @Html.Partial("DisplayPartial", thing)
}

在局部视图“DisplayPartial”中我有

@using (Ajax.BeginForm("Afunc", new AjaxOptions ()))
{
    @Html.EditorFor(model => model.AstringThing)
    @Html.EditorFor(model => model.AintThing)

    <input type="submit" name="submit" value="Ajax Post" />
}

目前,“Afunc”-Action将模型保存到数据库,然后重定向到控制器操作以从数据库中检索所有“事物”并呈现整个“显示”视图。

我的问题是:当我按下其中一个提交按钮时(列表中的每个“东西”都有一个提交按钮)。我只希望那个局部视图重新加载/反映我的变化。我不想重新加载整个“Displaythings”视图。我该怎么做呢?如果我只是返回一个局部视图,那么除了那个局部视图之外,我将失去其他一切。

如果这是一个不好的方法,请给我指示。

更新

当我在新页面中呈现局部视图时,我仍然做错了。我的控制器:

public ActionResult Afunc(ThingModel thingmodel)
{
    // do

    return PartialView("DisplayPartial", thingmodel);
}

我尝试过使用UpdateTargetId和onsuccess两个结果相同(新页面)

1 个答案:

答案 0 :(得分:12)

在你刚刚传递的AjaxOptions new AjaxOptions中,您可以使用UpdateTargetId属性指定目标元素:

<div id="unique_thing_id">
@using (Ajax.BeginForm("Afunc", new AjaxOptions { UpdateTargetId = 'unique_thing_id' }))
{    
}
</div>

上面,每个“东西”具有唯一ID的容器用<div id="unique_thing_id">表示。这将替换为请求的repsonse。更改Afunc以仅呈现特定的“事物”部分。