Обновление MVC .NET (обновление) PartialView без AJAX
У меня есть страница с частичным представлением, которая содержит DevEx ComboBox с кнопкой "Добавить" и DevEx GridView (я опустил код GridView). Страница отображается правильно с этим частичным представлением, только у меня проблема с ее обновлением.
//_ProductAppsGridViewPartial
<div class="form-horizontal">
<h4>Apps</h4>
@using (Html.BeginForm("AppsGridViewPartialAddNew", "Products", new { ProductID = ViewBag.ProductID }))
{
<div class="form-group">
<h5>Add new App:</h5>
@Html.DevExpress().ComboBox(settings =>
{
//..do some settings for ComboBox - some code omitted
settings.Properties.ValueField = "ApplicationID";
settings.Properties.TextField = "Name";
}).BindList(Model.AppsNotInProduct).GetHtml()
<input type="submit" value="Add" class="btn btn-default" />
</div>
}
</div>
У меня есть действие на моем контроллере, который добавляет выбранное приложение в базу данных и возвращает PartialView с той же (но обновленной) моделью, но ответ показывает только это частичное представление. Вот часть действия Controller, которая возвращает PartialView после обновления базы данных:
public ActionResult ProductAppsGridViewPartialAddNew(int ProductID)
{
//....update DB code - WORKS FINE
..
var model = GetProductAppsPartialModel(ProductID);
ViewBag.ProductID = ProductID;
ViewBag.CanEdit = true;
return PartialView("_ProductAppsGridViewPartial", model);
}
Можно ли обновить частичное представление без AJAX, может быть, что-то, что я написал выше? Так что главная проблема здесь в том, что я получаю новую страницу, показывающую только частичное представление.
2 ответа
Чтобы обновить часть страницы, вам нужно будет использовать ajax, чтобы заменить только необходимый контент. Вам также нужно будет использовать JavaScript для повторного рендеринга HTML, содержащегося в части. MVC поставляется с некоторыми помощниками ajax, или вы можете сделать это самостоятельно с помощью jquery. В данный момент результат действия возвращает частичное в соответствии с запросом, но браузеру сообщают, что он получает целую новую страницу и отображает ее как таковую.
Добавив эту ссылку в Microsoft ajax, вы увидите некоторые из ваших вариантов.
Я бы использовал jquery и сделал бы это сам. Также постарайтесь запомнить, что mvc - это серверная структура, которая поможет вам возвращать http-сообщения в браузер. Вы пытаетесь манипулировать вещами на стороне клиента. Живые обновления на стороне клиента всегда нуждаются в ajax для получения данных. Замена элементов в DOM требует некоторой формы JavaScript. Такие библиотеки, как jquery, делают это намного проще. Посмотрите на JQuery AJAX здесь.
Я думаю, вам нужно попробовать этот код. Обратите внимание, здесь нам нужно сохранить AJAX-вызов для обновления частичного представления
@using (Ajax.BeginForm("ActionName", "Controller", new { model = @Model.ID },
new AjaxOptions
{
OnSuccess = "onSuccessRefresh "
}))
{
<table>
<td>
</td>
<td> <input type="button" value="AddValue" /> </td>
</table>
}
Обработайте событие кода onsuccess с помощью jquery:-
function onSuccessRefresh {
// refersh your page or table
}
Это не полный код. но я думаю, что это поможет вам