Проблема проектирования ASP.NET MVC

У меня есть основной вид с двумя частичными представлениями (сетка и панель обратного вызова)

Этот главный вид получает IEnumerable<Model>, а панель просто получает Model.

Когда представление первоначально вызывается, частичное представление панели заполняется пустой моделью, поэтому оно пустое.

Но я хочу повторно отобразить панель, как только я нажму Edit в своем GridView.

Как я могу этого добиться?

В настоящее время у меня есть @Html.ActionLink на кнопке «Редактировать», но она не работает, так как она создаст новый вид вместо повторного рендеринга частичного вида панели.

Любые подсказки?

РЕДАКТИРОВАТЬ:

это мое редактирование:

Html.ActionLink("Edit", "EditConfig", new { id = DataBinder.Eval(c.DataItem, "QueueMonitorConfigurationsID") })

Функция, которую вызывает ссылка редактирования:

    [HttpGet]
    public ActionResult EditConfig(int id)
    {
        StorageConfigurationModel resultForPanel = new StorageConfigurationModel { };
        IEnumerable<StorageConfigurationModel> configList = (IEnumerable<StorageConfigurationModel>)Session["ConfigurationList"];
        foreach (StorageConfigurationModel configModel in configList)
        {
            if (configModel.QueueMonitorConfigurationsID == id)
            {
                resultForPanel = configModel;
                break;
            }
        }
        return PartialView("cbpnlNewUpdateConfigs", resultForPanel);
    }

Основной вид, содержащий частичные виды:

@model IEnumerable<BPM.Website.Models.StorageConfigurationModel>

@Html.Partial("gvConfigurations", Model)

@Html.Partial("cbpnlNewUpdateConfigs", new BPM.Website.Models.StorageConfigurationModel { QueueMonitorConfigurationsID = -1 })

person AAlferez    schedule 05.06.2013    source источник


Ответы (2)


В настоящее время у меня есть @Html.ActionLink на кнопке «Изменить».

Вы можете использовать AJAX. Например, вы можете заменить этот Html.ActionLink на Ajax.ActionLink и включить сценарии jquery.js и jquery.unobtrusive-ajax.js (в таком порядке), чтобы он действовал как вызов AJAX. Например:

@Ajax.ActionLink(
    "click to edit record", 
    "Edit", 
    new { id = item.Id }, 
    new AjaxOptions { UpdateTargetId = "editContainer" }
)

При нажатии на ссылку действие контроллера «Редактировать» будет вызвано с использованием запроса AJAX, и в качестве параметра будет передан идентификатор текущего элемента. Когда этот запрос AJAX завершится, элемент DOM с id="editContainer" будет обновлен результатами этого вызова AJAX. Таким образом, ваше действие контроллера «Редактировать» должно возвращать частичное представление, содержащее редактируемую запись.

person Darin Dimitrov    schedule 05.06.2013
comment
Как я могу передать параметр тогда? В моем случае я передаю id, поэтому я знаю идентификатор модели, который мне нужно отобразить. - person AAlferez; 05.06.2013
comment
Вы просто передадите идентификатор записи, которую нужно отредактировать, как часть параметра routeValues ​​помощнику Ajax.ActionLink, как показано в моем ответе. Поскольку у вас будет ссылка «Редактировать» для каждой записи, вы уже знаете идентификатор записи. Затем Ajax.ActionLink сгенерирует URL-адрес в следующем формате: /somecontroller/edit/123, где 123, конечно же, идентификатор записи, которую нужно отредактировать. И ваше действие контроллера Edit просто примет этот параметр id в качестве аргумента. - person Darin Dimitrov; 06.06.2013
comment
Это делается точно так же. Возможно, функция, которую я вызываю, является проблемой. - person AAlferez; 06.06.2013
comment
Что вы подразумеваете под он делает то же самое? Вы знаете разницу между Ajax.ActionLink и Html.ActionLink? Вы знаете, что такое AJAX? Также в показанном вами примере кода вы, похоже, используете некоторые DataBinder.Eval. Знаете ли вы разницу между классическими веб-формами ASP.NET и ASP.NET MVC? Кажется, вы совершенно не понимаете, что такое ASP.NET MVC. Я бы порекомендовал вам прочитать несколько очень простых руководств по началу работы здесь: asp.net/mvc - person Darin Dimitrov; 06.06.2013
comment
Да @Дарин, я знаю. Но это ссылка действия, и в таком виде она не будет повторно отображать частичный вид, который я хочу. Может быть, моя проблема заключается в функции, которую он вызывает. - person AAlferez; 06.06.2013

Решено с помощью Ajax POST

$.ajax({ тип: "POST", url: url, данные: данные, успех: успех, тип данных: тип данных });

person AAlferez    schedule 18.06.2013