2012-02-13 14 views
7

Używam MVC3 i wiem, że MVC3 obsługuje parametr JSON wiążący dosłownie do działania. Ale nie mogę tego zrobić z powodzeniem;Asp.Net MVC 3 Wiązanie modelu JSON nie działa

mam nazwa klasy tag

public class Tag 
{ 
    public int tagId { get; set; } 
    public string tagName { get; set; } 
} 

działanie na kontrolerze zwany Tag

[HttpPost] 
    public ActionResult Tag(Tag tag) 
    { 
     // Here will be codes... 
     return Json(new { success = 0 }); 
    } 

kod Javascript, które wysyłają js obiekt jako JSON do mojego działania

var tag ={tagId:5,tagName:"hello"}; 
    $.ajax({ 
      url: "/image/tag", 
      type: "POST", 
      data: $.toJSON(tag), 
      success: function (r) { 
       if (r.success == 1) { 
        window.location = r.redirect; 
       } 
      } 

danych post widzę w zakładce Firebug Net

{"tagId":5,"tagName":"hello"} 

Tag nazwy parametru w działaniu znacznika nie ma wartości null, ale ma wartości O dla tagId i null dla tagName. Na czym polega problem?

Odpowiedz

18

trzeba ustawić typ zawartości wniosku o application/json:

$.ajax({ 
    url: '/image/tag', 
    type: 'POST', 
    contentType: 'application/json; charset=utf-8', 
    data: $.toJSON(tag), 
    success: function (r) { 
     if (r.success == 1) { 
      window.location.href = r.redirect; 
     } 
    } 
}); 

Ach, i nie trzeba mieć tagu cechy modela zacząć od małej litery:

public class Tag 
{ 
    public int TagId { get; set; } 
    public string TagName { get; set; } 
} 

Uwaga 1: Klasa JavaScriptSerializer, której program ASP.NET MVC 3 używa za kulisami, jest w stanie prawidłowo obsłużyć tę sytuację.

Uwaga 2: W swoim działaniu Tag wydają się być powrocie następujące JSON: {"success":0} natomiast w swój sukces AJAX zwrotnego wydaje się być przy użyciu niektórych r.redirect właściwość, która nie istnieje.

Uwaga 3: Unikaj nazywania czynności kontrolera w taki sam sposób, jak w modelach widoku. Zwykle nazwy akcji powinny reprezentować czasowniki (jak List, Save, Delete, ...) podczas gdy modele widoku reprezentują zasoby (TagModel, ...).

+1

Tag jest zarówno rzeczownikiem, jak i czasownikiem –

+0

Dzięki Darin, mam do czynienia z tym problemem około 1 godziny mnie uratujesz. Dziękuję również za dodatkowe informacje. – Yucel

+0

Uwaga 2. Sukces = 0 w odpowiedzi, więc blok nie będzie eval –

Powiązane problemy