Использование ASP.NET MVC и jQuery для частичного просмотра / отправки формы без обновления страницы - PullRequest
0 голосов
/ 15 декабря 2009

Я новичок в ASP.NET MVC и jQuery, поэтому я подумал, что поделюсь, как я реализовал загрузку частичных представлений и отправку форм таким образом, чтобы не требовалось обновления всей страницы. Я надеюсь получить некоторую критику от экспертов, если есть лучший способ сделать это :)

Вся магия совершается с помощью 3 функций javascript, которые я связываю с различными событиями, такими как нажатие кнопки, выбор вкладки jQueryUI и т. Д.

Во-первых, вот как я получаю частичное представление:

function showAjaxMessage(targetDiv, ajaxMessage) {    
    var ajaxLoader = "<img src='Content/loader.gif' alt=''>";
    $(targetDiv).html("<p>" + ajaxLoader + " " + ajaxMessage+"</p>"); 
}

function getPartialView(actionUrl, targetDiv, ajaxMessage, callback) {
    showAjaxMessage(targetDiv, ajaxMessage);

    $.get(actionUrl, null, function(result) {
        $(targetDiv).html(result);
        callback();
    });
}

Использование:

getPartialView("MyController/MyAction", "#myDiv", "Loading...", function() { alert('Loaded!'); });

Это установит любое возвращаемое действие (PartialView) в качестве содержимого myDiv, а затем вызовет функцию обратного вызова (в этом случае это просто вызовет предупреждение) с красивым сообщением «Загрузка ...», отображаемым в div, пока мы ждем ответа.

Во-вторых, отправив форму:

function submitForm(actionUrl, targetDiv, ajaxMessage, form, callback) {

    var data = $(form).serialize();
    showAjaxMessage(targetDiv, ajaxMessage);
    $.post(
        actionUrl,
        data,
        function(data) {
            $(targetDiv).html(data);
            callback();
        }
    );
}

Использование:

submitForm("MyController/MyAction", "#myDiv", "Submitting...", "#myForm", function() { alert('Submitted!'); }); 

Еще раз, это вызывает действие контроллера, но на этот раз он выполняет POST с данными данной формы (), сериализованными как "input1 = value1 & input2 = value2 & ... & inputn = valuen", что позволяет действию что-то делать с пользовательским вводом, например:

public ActionResult MyAction(FormCollection form)
{
    // eg. TryUpdateModel<MyActionViewModel>(this.myActionViewModel);
    // or 
    // do something with form["input1"] ...

    return PartialView("MyPartialView", this.myActionViewModel);
}

Возвращенный HTML-код снова отображается в myDiv, и вызывается функция обратного вызова.

Я еще не добавил никакой проверки, но основы работают довольно хорошо, но если есть лучший способ, пожалуйста, поделитесь:)

1 Ответ

2 голосов
/ 15 декабря 2009

Я бы просто использовал jQuery.taconite :

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