【问题标题】:mvc partial view ajax update returning the partial view as a pagemvc 部分视图 ajax 更新将部分视图作为页面返回
【发布时间】:2012-02-19 12:57:28
【问题描述】:

我有一个部分观点,即在将项目添加到数据库时需要更新。

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?

标签: ajax asp.net-mvc-3 partial-views partial-page-refresh


【解决方案1】:

由于 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,我在布局中使用了我合并/删除的其他一些脚本。删除时我删除了不显眼的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多