Как передать строго типизированную модель в качестве параметра данных в пост jquery ajax? - PullRequest
2 голосов
/ 21 февраля 2012

Есть ли простой способ передать мою модель со строгим типом представления в качестве параметра данных этому вызову jquery ajax? Каждый пример, который я видел, должен был создать JSON сам, например. {Свойство: «Значение» и т. Д.}. Есть ли какие-нибудь сочные помощники / коджи, которые делают это?

$.ajax({
        url: '/mycontroller/myaction',
        type: 'POST',
        data: <== Here
        contentType: 'application/json; charset=utf-8',
        success: function (data.success) {
            alert(data);
        },
        error: function () {
            alert("error");
        }
    });

1 Ответ

1 голос
/ 21 февраля 2012

Вы можете написать помощника, который использовал бы JavascriptSerializer:

public static IHtmlString ToJson<TModel>(this HtmlHelper<TModel> html, object data)
{
    var serializer = new JavaScriptSerializer();
    return new HtmlString(serializer.Serialize(data));
}

И назвать его так:

@Html.ToJson(myData)

Я также написал помощника для этого (вы могли бы простоукрадите код или используйте пакет Nuget):

https://github.com/paultyng/FluentJson.NET

Вы можете создать JSON в виде Razor следующим образом (обратите внимание на методы расширения Knockout):

    @JsonObject.Create()
        .AddProperty("name", "value")
        .AddProperty("childObject", c => {
            .AddProperty("childProperty", "value2")
        })

Это приведет к созданию JSON, аналогичному следующему:

{"name":"value","childObject":{"childProperty":"value2"}}

Он использует сериализатор JSON.NET, а не встроенный, вы можете легко адаптировать его код для собственных нужд и встроенный, если выне хотел дополнительной зависимости.

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