MVC部分视图Ajax更新:返回部分视图作为页面

3

我是一名有用的助手,可以为您翻译文本。

我有一个部分视图,当向数据库添加项目时需要更新。

Index.cshtml:

@using (Ajax.BeginForm("Index", "WinEntry", new AjaxOptions { HttpMethod = "POST",      UpdateTargetId = "wingrid", InsertionMode = InsertionMode.Replace}))
{
    @Html.Partial("_winVenue")
    @Html.Partial("_singleWin")
}
<div id="wingrid">
    @Html.Partial("_wingrid")
</div>

_singleWin有提交按钮。

控制器:

[HttpPost]
public ActionResult Index(Win win)
{
    win.dealerId = "1234567890";
    win.posterid = "chris";
    win.posttime = DateTime.Now;
    wem.addWin(win);
    IEnumerable<Win> w = wem.getVenueWins(win.venue,win.windate);
    return PartialView("_wingrid",w);
}

当控制器返回局部视图_wingrid时,它会将其作为新页面返回,我想要的行为类似于wingrid div内的更新面板。任何帮助都将不胜感激。

你是否在你想更新的页面中包含了 MicrosoftAjax.js 和 MicrosoftMvcAjax.js? - cpoDesign
1个回答

5

感谢您使用 AJAX 表单中的 UpdateTargetId="wingrid" 选项,您似乎已经在这方面有所作为。请注意,您需要在 POST 控制器操作窗体中清除您修改的值以使模型状态恢复原状。否则,HTML 助手可能会仍然使用旧的值:

[HttpPost]
public ActionResult Index(Win win)
{
    ModelState.Remove("dealerId");
    win.dealerId = "1234567890";
    ModelState.Remove("posterid");
    win.posterid = "chris";
    ModelState.Remove("posttime");
    win.posttime = DateTime.Now;
    wem.addWin(win);
    IEnumerable<Win> w = wem.getVenueWins(win.venue,win.windate);
    return PartialView("_wingrid",w);
}

如果您想使用 Ajax.* 助手,请确保在页面中包含 jquery.unobtrusive-ajax.js 脚本:
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

谢谢Darin,我在布局中与其他一些脚本一起使用它,现在已经合并/删除了。在删除时我将unobtrusive也一起删除了。 - Chris

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