ASP.NET MVC ActionResult не читает данные json из запроса ajax - PullRequest
0 голосов
/ 29 марта 2012

У меня есть вопрос о чтении строки JSON в C #. Мой сценарий следующий.

У меня есть проект ASP.NET MVC C # (.NET Framework 3.5). В LobbyController у меня есть

. 
.
.
using System.IO;
using System.Web.Script.Serialization;
.
.
.
[HttpPost]
public ActionResult SomeMethod(string sampleData)
{
    //do stuff here
}

и в файле сценария jquery я определил функцию щелчка

$("#buttonID").click(function() {
    var sampleData = {
            "property1": $('#elementID1').val(),
            "property2": $('#elementID2').val(),
            "property3": $('#elementID3').val()
        };

    $.ajax({
        url: "/Lobby.aspx/SomeMethod",
        type: "POST",
        data: sampleData,
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: function() { $('#message').html('Success').fadeIn(); },
        error: function() { $('#message').html('Error').fadeIn(); }
    });
});

Теперь, при щелчке запускается ajax-функция, и SomeMethod вызывается в контроллере, как и ожидалось, но параметр sampleData имеет значение null. Я также попытался изменить строку «data» в функции ajax следующим образом: data: JSON.stringify(sampleData), но это не сработало.

Я пытался предупредить отдельные свойства объекта sampleData, и они имели значение, которое они должны иметь, но по какой-то причине параметр sampleData в ActionMethod имеет значение null. Может кто-нибудь сказать мне, что мне не хватает? Может быть, это синтаксическая ошибка с моей стороны или что-то нужно делать на стороне c #?

Буду признателен за любую помощь

Ответы [ 5 ]

2 голосов
/ 29 марта 2012

Вы можете использовать класс модели для привязки данных вашего клиента, MVC3 имеет встроенную поддержку привязки JSON.

В этом блоге * есть пример .

.
0 голосов
/ 30 марта 2012

Спасибо всем за помощь.

Так как я использовал комбинацию большего количества ответов, я подведу итог здесь.Я должен был переопределить объект sampleledata в jquery, где имена свойств не были заключены в кавычки.Затем я последовал за ответом Томми.Наконец, я изменил свою подпись SomeMethod, чтобы она возвращала тип JsonResult и принимала пользовательский класс модели в качестве параметра в соответствии с ответом whosrdaddy.Я бы отметил ваши посты как полезные, но у меня пока недостаточно репутации.Еще раз спасибо всем за ваши сообщения.

Просто быстрое примечание.В точке №4 ответа Томми, вам нужно сослаться на сборку Microsoft.Web.Mvc.dll, которую вы скачали, но я уверен, что вы все это поймете.

0 голосов
/ 29 марта 2012

Поскольку вы используете .NET 3.5, я предполагаю, что вы используете MVC2. Я только что столкнулся с той же проблемой на прошлой неделе. Мне пришлось сделать несколько вещей:

  1. Загрузите и ознакомьтесь с плагином JQuery JSON на странице просмотра / главной компоновки / где угодно.

  2. Загрузите библиотеку фьючерсов ASP.NET MVC 2 и ознакомьтесь со сборкой Microsoft.Web.Mvc.dll.

  3. Изменить data: sampleData на data: $.toJSON(sampleData)

  4. В вашем global.asax добавьте using System.Web.Mvc;. Затем в вашем методе Application_Start () добавьте строку ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());

Это позволило отправить JSON в метод действия моего контроллера. Я получал тот же сумасшедший URL-кодированный беспорядок, что и вы, прежде чем наткнулся на этот метод. Моя основа для этой информации взята из статьи Phil Haacked здесь .

0 голосов
/ 29 марта 2012

Просто создайте класс, охватывающий модель JSON, я предполагаю, что у вас есть MVC3 со встроенной привязкой модели JSON.

public class MyModel
{
    public string RaceName{get; set;}
    public int StatOrigValue{get; set;}
    public int FreePts{get; set;}
}

[HttpPost]
public JsonResult SomeMethod(MyModel sampledata)
{
    //do stuff here
   return new JsonResult {Data =  new {Success = "Success"}}
}
0 голосов
/ 29 марта 2012

Вы передаете объект JSON в действие, а не строку.Вы близки с JSON.stringify:

data: "sampleData=" + encodeURIComponent(JSON.stringify(sampleData))

Это должно отправить на сервер строку, содержащую JSON-представление объекта sampleData

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