Обновление 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
}

Это не полный код. но я думаю, что это поможет вам

Другие вопросы по тегам