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

9

我是.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"操作将模型保存到数据库,然后重定向到控制器操作以检索所有“things”并呈现整个“Displaythings”视图。

我的问题是:当我按下其中一个提交按钮(列表中有一个提交按钮),我只想重新加载/反映该部分视图对我的更改。我不想重新加载整个“Displaythings”视图。我该怎么做?如果我只返回部分视图,那么我会失去除该部分视图之外的所有内容。

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

更新:

我仍在做一些错误的事情,因为我得到了在新页面中呈现的部分视图。我的控制器:

public ActionResult Afunc(ThingModel thingmodel)
{
    // do

    return PartialView("DisplayPartial", thingmodel);
}

我尝试使用UpdateTargetId和onsuccess,但结果都是打开了一个新页面。

1个回答

12
在你现在仅仅通过new AjaxOptions传递的AjaxOptions中,你可以使用UpdateTargetId属性指定目标元素:
<div id="unique_thing_id">
@using (Ajax.BeginForm("Afunc", new AjaxOptions { UpdateTargetId = 'unique_thing_id' }))
{    
}
</div>

上面,每个“thing”都有唯一id的容器用 <div id="unique_thing_id"> 表示。这将被请求响应替换。将 Afunc 更改为只呈现特定的“thing”局部。

3
我会接受你的答案,因为你指出了我遗漏的一件事情。然而,这只是我忽略的两件事中的其中一件。一个常见问题是,在浏览网页后忘记将以下内容添加到你的布局页:<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> - Andreas
@manojlds,我开了一个新问题,请您看一下这个问题:链接 - Jack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接