Saltar al contenido

Cómo recibir JSON como un parámetro de método de acción MVC 5

Buscamos por internet para así tenerte la solución para tu duda, en caso de dificultades puedes dejar tu duda y te respondemos con gusto.

Solución:

Desafortunadamente, Dictionary tiene problemas con Model Binding en MVC. Lee la historia completa aquí. En su lugar, cree un archivador de modelos personalizado para obtener el diccionario como parámetro para la acción del controlador.

Para resolver su requerimiento, aquí está la solución de trabajo:

Primero cree sus ViewModels de la siguiente manera. PersonModel puede tener una lista de RoleModels.

public class PersonModel

    public List Roles  get; set; 
    public string Name  get; set; 


public class RoleModel

    public string RoleName  get; set;
    public string Description  get; set;

Luego, tenga una acción de índice que servirá la vista de índice básica:

public ActionResult Index()

    return View();

La vista de índice tendrá la siguiente operación JQuery AJAX POST:





Indexar publicaciones de acción a la acción AddUser –

[HttpPost]
public ActionResult AddUser(PersonModel model)

    if (model != null)
    
        return Json("Success");
    
    else
    
        return Json("An Error Has occoured");
    

Entonces, ahora, cuando se realiza la publicación, puede obtener todos los datos publicados en el parámetro de acción del modelo.

Actualizar:

Para asp.net core, para obtener datos JSON como su parámetro de acción, debe agregar el [FromBody] attribute antes de su nombre de parámetro en la acción de su controlador. Nota: si usa ASP.NET Core 2.1, también puede usar el [ApiController] attribute inferir automáticamente la [FromBody] fuente vinculante para los parámetros del método de acción compleja. (Doc)

ingrese la descripción de la imagen aquí

Hay un par de problemas aquí. Primero, debe asegurarse de vincular su objeto JSON al modelo en el controlador. Esto se hace cambiando

data: JSON.stringify(usersRoles),

a

data:  model: JSON.stringify(usersRoles) ,

En segundo lugar, no está vinculando tipos correctamente con su llamada jquery. si quitas

contentType: "application/json; charset=utf-8",

inherentemente se unirá de nuevo a un string.

Todos juntos, use el primer método ActionResult y la siguiente llamada jquery ajax:

    jQuery.ajax(
        type: "POST",
        url: "@Url.Action("AddUser")",
        dataType: "json",
        data:  model: JSON.stringify(usersRoles) ,
        success: function (data)  alert(data); ,
        failure: function (errMsg) 
        alert(errMsg);
        
   );

Estás enviando un array de string

var usersRoles = [];
jQuery("#dualSelectRoles2 option").each(function () 
    usersRoles.push(jQuery(this).val());
);   

Así que cambie el tipo de modelo en consecuencia

 public ActionResult AddUser(List model)
 
 

Te mostramos las comentarios y valoraciones de los lectores

Recuerda algo, que tienes la capacidad de decir si diste con la contestación.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4.5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *