Получить данные из частичного просмотра по запросу поста через JQuery - PullRequest
4 голосов
/ 29 марта 2012

У меня есть представление, которое динамически обновляется в зависимости от ввода пользователя - вот как это работает:

  • Представление отображается с начальными данными из контроллера, заполненными частичным представлением
  • Когда что-тощелкаю, я использую извлечение частичного представления из ActionResult из контроллера и заменяю существующие данные на jQuery
  • Мне нужна строка из контроллера для основного представления, поэтому я делаю еще один вызов контроллера и извлекаюstring.

Я хочу знать, есть ли способ получить нужную мне строку с частичным представлением вместо отдельного вызова контроллера.

Исходные данные:

<!-- This needs to change when the partial is replaced, but it's heavier html
     and I don't want to include it in the partial to minimize server calls/data -->
<div class="Location">&nbsp;</div>
<div class="myContainingDiv">
    <!-- This content gets updated -->
    @Html.Partial("_MyPartial");
</div>

Частичное представление:

<div class="something">Model.something</div>

Метод контроллера (частичное представление):

[HttpGet]
public ActionResult _MyPartial(string param1)
{
    MyModel model = new MyModel();
    // This is dynamic and what I need to get in my main view from the partial view
    model.something = "Hi";
    return PartialView(model);
}

Метод контроллера (возвращает нужную строку):

public string GetHiString(string param1)
{
    return "Hi";
}

JavaScript (обновить частичное представление):

    $.post('/Home/_MyPartial', { 'param1': 'Hi' }, function (result) {
        $('.something').replaceWith(result);

        getOtherThing('Hi');
    });

JavaScript(getOtherThing):

    $.post('/Home/_GetHiString', { 'param1': 'Hi' }, function (result) {
        $('.Location').replaceWith(result);
    });

Хорошо, я думаю, что это еverything.

В основном Я хочу нажимать на контроллер только один раз за вызов .Включение div в частичное представление не является идеальным вариантом.

Второй раз я нажал на контроллере из основного представления, чтобы получить данные, которые можно легко создать из объекта в первом методе и отправить вчастичное представление.

Итак, помимо включения <div class="Location"> в мое частичное представление, есть способ отправить дополнительную информацию, которая мне нужна, в частичное представление и динамически получить ее из моего основного вида (через JavaScript).Или есть способ вернуть дополнительные данные, когда я звоню _MyPartial из моего JavaScript?

Это действительно последнее упрощение, которое я хочу сделать, и я очень признателен за помощь!

1 Ответ

4 голосов
/ 29 марта 2012

Вы можете изменить частичное представление _MyPartial и его модель, чтобы включить в него что-то скрытое, что можно извлечь с помощью jQuery:

Частичное представление

<div class="something">Model.something
    <input class="somethingElse" type="hidden" value="@(Model.somethingElse)" />
</div>

Метод контроллера (частичное представление):

[HttpGet]
public ActionResult _MyPartial(string param1)
{
    MyModel model = new MyModel();
    // This is dynamic and what I need to get in my main view from the partial view
    model.something = "Hi";
    model.somethingElse = GetHiString(param1);
    return PartialView(model);
}

JavaScript (обновить частичное представление)

$.post('/Home/_MyPartial', { 'param1': 'Hi' }, function (result) {
    $('.something').replaceWith(result);

    $('.Location').html($('.somethingElse').val());

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...