Вопрос по jquery, asp.net-mvc – Несколько идентификаторов цели обновления с Ajax.ActionLink ASP.Net MVC

7

Есть ли способ указать несколько идентификаторов цели обновления с помощью Ajax.ActionLink, чтобы я мог визуализировать набор частичных представлений при обратном вызове?

Проблема, которую я вижу, заключается в том, что Ajax.ActionLink предоставляет мне только один целевой идентификатор для обновления, но мне нужно обновить несколько областей страницы различными данными после вызова ajax.

Любая помощь в этом была бы отличной! Спасибо!

Ваш Ответ

3   ответа
4

Нет, это не так. Вы могли бы, однако, написать код, который делает это самостоятельно. Вам необходимо:

  1. Partition the returned HTML into different "areas" which you will apply to different parts of the page. You could do this on the controller (perhaps by rendering multiple actions and storing a list of the HTML fragments returned) or in JavaScript.
  2. Write JavaScript code to take the returned HTML, iterate the targets you'd like to update, and apply the appropriate HTML fragment to each. The code would look something like the code below.
  3. Don't use the Ajax form HTML helper. Instead, render a standard form and submit it via JavaScript.

Пример:

$.ajax({
    type: "POST", 
    url: "/action/controller",
    success: function(data) {
        var key;
        for (key in data) {
            $("#" + key).html(data[key]);
        }
    }
 });

Это предполагает, что вызываемое вами действие вернет объект, в котором имена свойств представляют собой идентификаторы обновляемых элементов, а значения свойств представляют собой фрагменты HTML в виде строк.

6

http://devlicio.us/blogs/sergio_pereira/archive/2009/08/23/asp-net-mvc-with-jquery-superload.aspx

У меня была такая же проблема, и она помогает мне ее решить

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
1

Я знаю, что этот вопрос старый, но если вы используете то же решение, на которое указал @Gregoire (http://devlicio.us/blogs/sergio_pereira/archive/2009/08/23/asp-net-mvc-with-jquery-superload .aspx) для серверной части вы можете передать несколько идентификаторов в AjaxOptions

@Ajax.ActionLink("Link", "Action", new AjaxOptions { UpdateTargetId = "id1, #id2" })

структура MVC автоматически добавит "#" вid1 в этом случае. Затем вам нужно будет изменитьjquery.unobtrusive-ajax.jsФункция asyncOnSuccess вокруг строки # 45 выглядит следующим образом:

mode = (element.getAttribute("data-ajax-mode") || "").toUpperCase();
$(element.getAttribute("data-ajax-update")).each(function (i, update) {
    var top,
        html = $("#" + update.id, data).html();

    switch (mode) {
    case "BEFORE":
        top = update.firstChild;
        $("<div />").html(html).contents().each(function () {
            update.insertBefore(this, top);
        });
        break;
    case "AFTER":
        $("<div />").html(html).contents().each(function () {
            update.appendChild(this);
        });
        break;
    default:
        $(update).html(html);
        break;
    }
});

Javascript просто использует тот же идентификатор, который был передан, чтобы получить только этот контент и заменить тот же идентификатор тем же контентом. Это также работает для Ajax.BeginForm (). Есть смысл?

Похожие вопросы