ASP.NET MVC 3.0 Обновление содержимого элемента / html формы с использованием Partial action и jQuery ajax - PullRequest
0 голосов
/ 24 мая 2011

У меня есть Частичное A1 внутри Частичное A.

Мне нужно визуализировать частичное представление A1 на кнопке A1B click.

Для этого у меня есть частичноепросмотр действия с типом параметра модели частичного просмотра A (поскольку существуют некоторые зависимости от A)

public PartialViewResult A1Partial(A model)
{
    //Getting my deserialized model here successfully

    //doing changes in the model collections

    return PartialView("A1Partial", model);
}

У меня есть функция onclick для вызова моего A1Partial частичного действия:

$(document).ready(function () {
    $("#A1B").click(function () {

        dataString = $("#myForm").serialize();

        $.ajax({
            type: "POST",
            url: "/Controller/A1Partial",
            data: dataString,
            dataType: "json",
            success: function (data) { 
                            //not working here

                            $("#myDiv").html("");
                $("#myDiv").html(data); 
            }

        });

        return false;
    });
});

Мой звонок от jQuery ajax работает правильно, и dataString десериализовывается в контроллере без каких-либо проблем.

Но я ничего не получил в $("#myDiv").append(data); похоже, что html не прошел.

Какие изменения мне нужно сделать, чтобы это заработало?

Ответы [ 2 ]

0 голосов
/ 24 мая 2011

Вы должны визуализировать частичное представление на сервере и затем отправить результат HTML через Json следующим образом:

public static class Renders
{
    public static string RenderPartialView(this Controller controller, string viewName, object model)
    {
        if (string.IsNullOrEmpty(viewName))
            viewName = controller.ControllerContext.RouteData.GetRequiredString("action");

        controller.ViewData.Model = model;
        using (var sw = new StringWriter())
        {
            ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
            var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
            viewResult.View.Render(viewContext, sw);

            return sw.GetStringBuilder().ToString();
        }
    }
}

В контроллере:

public JsonResult A1Partial(A model)
{
    //Getting my deserialized model here successfully

    //doing changes in the model collections

    return Json(new
    {
        Html = this.RenderPartialView("A1Partial", model)
    }, JsonRequestBehavior.AllowGet);
}

Затем в JQueryкод:

$("#myDiv").html(data.Html);
0 голосов
/ 24 мая 2011

Вы указываете, что ожидаете тип ответа JSON:

dataType: "json"

И все же вы пытаетесь использовать его, как если бы он был HTML:

$('#myDiv').append(data);

Так что удалите это dataType: 'json'из запроса AJAX и в обратном вызове успеха переменная данных будет представлять HTML-код, возвращаемый A1Partial.

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