ASP.NET MVC - визуализировать PartialView с помощью AJAX? - PullRequest
3 голосов
/ 30 января 2011

Ранее сегодня я опубликовал еще одно сообщение, в котором @Darin Dimitrov мне очень помог, однако я опять застрял ... Мой javascript вызывает AddWebsite ActionResult, который работает должным образом, однако функция ошибки в $ .ajax() всегда срабатывает, поскольку

return PartialView(ListPartialView, MapUserToViewModel); 

не является допустимым JSON.

Я сталкивался с примерами, когда люди используют что-то вроде

RenderPartialViewToString(partialview, model);

и бросают его в объект JSON ... но это слишком "хакерски", если вы спросите меня ... isnЕсть ли более простой способ сделать это?

... И код:

// DashboardController.cs

[HttpPost]
public ActionResult AddWebsite(CreateWebsiteViewModel website)
{
    if (!ModelState.IsValid)
    {
        throw new HttpException(400, "Client-side validation failed.");
    }

    if (string.IsNullOrWhiteSpace(website.URL))
    {
        throw new ArgumentNullException("URL", "The URL cannot be empty nor contain only whitespaces.");
    }

    using (_session.BeginTransaction())
    {
        _session.Query(new AddWebsite(_contextProvider.GetUserSession.UserId, website.URL));
        _session.Transaction.Commit();
    }

    return PartialView(ListPartialView, MapUserToViewModel);
}

// MyJs.js

$("#testform").live('submit', function () {

    var test = { URL: $("#URL").val() };

        $.ajax({
            url: "/Dashboard/AddWebsite",
            type: "POST",
            data: JSON.stringify(test),
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function (data) {
                alert("TRIG");
                $("#content").html(data);
            },
            error: function () {
                alert("Error");
            }
        });

    return false;
});

Заранее спасибо!

Ответы [ 2 ]

4 голосов
/ 30 января 2011

В вашем конкретном случае, я думаю, проблема в вашем коде JavaScript.Вы указываете dataType (то, что функция ожидает проанализировать в ответе) как json.Основываясь на опубликованном вами действии, вы должны иметь html в качестве dataType, и это должно решить вашу проблему.В этом нет ничего плохого (вам не нужно использовать JSON для всего).

1 голос
/ 30 января 2011

Простые данные

Почему вы устанавливаете dataType и contentType на первое место?Поскольку ваш объект test очень прост, вы можете просто предоставить его как есть, и он без проблем будет использован Asp.net MVC, и вы вернете частичное представление.

Сложные данные

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

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