Частичное представление mvc Обновление ajax, возвращающее частичное представление как страницу - PullRequest
3 голосов
/ 19 февраля 2012

У меня есть частичное мнение, что при добавлении элемента в базу необходимо обновить.

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, он возвращает его как новую страницу, и поведение, которое я ищу, похоже на панель обновления внутри div wing wing.

Буду признателен за любую помощь.

1 Ответ

5 голосов
/ 19 февраля 2012

Похоже, вы уже делаете это благодаря опции UpdateTargetId = "wingrid" в форме AJAX.Просто убедитесь, что вы очищаете значения, которые вы изменяете в действии контроллера 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);
}

Также не забудьте включить скрипт jquery.unobtrusive-ajax.js на свою страницу, если хотите, чтобы ваши помощники Ajax.* работали:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
...