ASP.NET MVC 3 - где мой JsonValueProvider? - PullRequest
2 голосов
/ 01 сентября 2011

Я пытаюсь отправить JSON в метод Action:

[HttpPost]
public virtual ActionResult KoUpdateAccount(CostCentreDTOX cc)
{
    if (cc.NameCC == null)
    {
        return Json(new { message = "Im null" });
    }
    else
    {
        string s = cc.NameCC;
        return Json(new { message = s });
    }
}

Где CostCentreDTOX определяется как:

[Serializable]
public class CostCentreDTOX
{
    public int CostCentreId { get; set; }
    public int IdTransactionType { get; set; }
    public string NameCC { get; set; }
}

Json создается с помощью (я использую Knockoutjs):

var json = ko.toJSON(this.costCentres()[0]);

Это приводит к следующей строке (что я и хочу):

"{"CostCentreId":5,"IdTransactionType":2,"NameCC":"Impuestos"}"

Метод, который отправляет все на сервер:

this.save = function() { 
    var json = ko.toJSON(this.costCentres()[0]);
    api.postCud({
        url: "/admin/Accounts/KoUpdateAccount/",
        dataType: 'JSON',
        data: json,
        type: "post",
        contentType: "application/json; charset=utf-8",
        success: function(result) { alert(result.message) }
    });
}

Где this.costCentre () [0] - это объект, определенный следующим образом:

function costCentre(CostCentreId, IdTransactionType, NameCC) {

    this.CostCentreId      = ko.observable(CostCentreId); 
    this.IdTransactionType = ko.observable(IdTransactionType); 
    this.NameCC            = ko.observable(NameCC);
}

Однако параметр Action cc просто получает значения по умолчанию, как если бы JsonValueProvider не был зарегистрирован. Но я использую ASP.NET MVC 3, поэтому он должен быть там, верно? Просто там.

EDIT:

Я попытался добавить в файл Global.asax следующее:

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
            ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());
        }

Но все же, cc создается со значениями по умолчанию.

любые предложения ??

Ответы [ 2 ]

1 голос
/ 01 сентября 2011

Является ли api.postCud тем, что делает что-то экзотическое, что может вызвать проблемы при выполнении сообщения?Вы пытались использовать $ .ajax () вместо этого, просто чтобы увидеть, как это работает?

0 голосов
/ 01 сентября 2011

Как и подозревал @Major Byte, возникла проблема с тем, как осуществляется вызов ajax. Это делается с помощью метода api.postCud, определенного для API.

Этот метод является просто оболочкой для $ .ajax (см. Видео Эрика Соуэлла о MvcConf2: Развитие практики использования jQuery и Ajax в приложениях ASP.NET MVC) . Проблема в том, что он объединяет параметры для вызова $ .ajax с использованием $ .extend (), и я не включил положение для параметра dataType.

Таким образом, MVC не знал, что JSON публикуется, и, следовательно, привязка модели не работает.

Вот что происходит, когда я сплю 2 часа ...

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