2012-02-13 21 views
7

Estoy utilizando MVC3 y sé que MVC3 admite el enlace JSON literal al parámetro Acción. Pero no puedo hacerlo con éxito;Asp.Net MVC 3 JSON Encuadernación del modelo no funciona

que tienen un nombre de clase Tag

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

una acción de controlador llamado Tag

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

código Javascript que envían js objeto como JSON a mi acción

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; 
       } 
      } 

Post Data que veo en la pestaña Firebug Net

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

La etiqueta del nombre del parámetro en Acción de la etiqueta no es nula, pero tiene los valores O para tagId y null para tagName. ¿Cuál es el problema aquí?

Respuesta

18

Es necesario configurar el tipo de contenido de la solicitud de 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; 
     } 
    } 
}); 

Ah, y que no es necesario tener su etiqueta del modelo empezar con una letra minúscula:

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

Observación 1: La clase JavaScriptSerializer que ASP.NET MVC 3 usa entre bastidores es capaz de manejar esto correctamente.

Nota 2: En su acción Tag que parece estar regresando el siguiente JSON: {"success":0} mientras que en su éxito AJAX de devolución de llamada que parece estar utilizando algún r.redirect propiedad que no existe.

Observación 3: Evite nombrar las acciones de su controlador de la misma manera que sus modelos de vista. Normalmente, los nombres de acción deben representar verbos (como List, Save, Delete, ...) mientras que los modelos de vista representan recursos (TagModel, ...).

+1

La etiqueta es tanto un sustantivo como un verbo –

+0

Gracias Darin, me estoy enfrentando con este problema, aproximadamente 1 hora me salvas. También gracias por su información adicional – Yucel

+0

Observación 2. Éxito = 0 en la respuesta para que el bloqueo no evalúe –

Cuestiones relacionadas