He creado una función en javascript como que:

function addNewManufacturer() {
       var name = $("#id-manuf-name").val();
       var address = $("#id-manuf-address").val();
       var phone = $("#id-manuf-phone").val();

       var sendInfo = {
           Name: name,
           Address: address,
           Phone: phone
       };

       $.ajax({
           type: "POST",
           url: "/Home/Add",
           dataType: "json",
           success: function (msg) {
               if (msg) {
                   alert("Somebody" + name + " was added in list !");
                   location.reload(true);
               } else {
                   alert("Cannot add to list !");
               }
           },

           data: sendInfo
       });
}

Me llama jquery.json-2.3.min.js archivo de secuencia de comandos y la utilicé para toJSON(array) método.

Controlador, tengo este Add acción

[HttpPost]
public ActionResult Add(PersonSheets sendInfo) {
    bool success = _addSomethingInList.AddNewSomething( sendInfo );

    return this.Json( new {
         msg = success
    });

}

Pero sendInfo como método parámetro es null.

El modelo:

public struct PersonSheets
{
    public int Id;
    public string Name;
    public string Address;
    public string Phone;
}

public class PersonModel
{
    private List<PersonSheets> _list;
    public PersonModel() {
         _list= GetFakeData();
    }

    public bool AddNewSomething(PersonSheets info) {
         if ( (info as object) == null ) {
            throw new ArgumentException( "Person list cannot be empty", "info" );
         }

         PersonSheets item= new PersonSheets();
         item.Id = GetMaximumIdValueFromList( _list) + 1;
         item.Name = info.Name;
         item.Address = info.Address;
         item.Phone = info.Phone;

         _list.Add(item);

         return true;
    }
}

¿Cómo podría hacer en el método de acción cuando los datos se envían con el POST ?

No sé cómo se usa.
También, es posible enviar la respuesta (ajax) a través de JSON ?

  • Hola Ojos De Serpiente. Por favor, puedes cambiar el aceptado respuesta a Neha la respuesta? La respuesta por Praveen Prasad actualmente está roto como él (en el momento de la escritura) no puede codificar JSON, y que no establezca JSON encabezado de Tipo de Contenido. Neha correctamente no tanto de estos. He probado las dos respuestas.
InformationsquelleAutor Snake Eyes | 2011-12-15

5 Comentarios

  1. 104

    Crear un modelo de

    public class Person
    {
        public string Name { get; set; }
        public string Address { get; set; }
        public string Phone { get; set; }
    }

    Los Controladores, Como A Continuación

        public ActionResult PersonTest()
        {
            return View();
        }
    
        [HttpPost]
        public ActionResult PersonSubmit(Vh.Web.Models.Person person)
        {
            System.Threading.Thread.Sleep(2000);  /*simulating slow connection*/
    
            /*Do something with object person*/
    
    
            return Json(new {msg="Successfully added "+person.Name });
        }

    Javascript

    <script type="text/javascript">
        function send() {
            var person = {
                name: $("#id-name").val(),
                address:$("#id-address").val(),
                phone:$("#id-phone").val()
            }
    
            $('#target').html('sending..');
    
            $.ajax({
                url: '/test/PersonSubmit',
                type: 'post',
                dataType: 'json',
                contentType: 'application/json',
                success: function (data) {
                    $('#target').html(data.msg);
                },
                data: JSON.stringify(person)
            });
        }
    </script>
    • su personlist clase debe tener propiedades nombre,adrress,teléfono
    • usted necesita tener una clase de c#personlist , que no se encuentra en el código de ur.
    • El problema NO es el modelo. El problema es javascript, porque en un controlador, el parámetro sendInfo es nulo.
    • el problema es que en el modelo solamente. El uso de firebug o fiddler para capturar el tráfico. Usted verá que el nombre propio-pares de valores se enviarán. Pero ya que usted no ha creado un modelo adecuado, MVC no es vinculante valores recibidos para el Modelo.
    • Quiero que el uso de la estructura no sólo de la propiedad, que es el problema.
    • El problema es struct. Si puedo crear un sepparate clase con sólo la propiedad y llamar a ellos en otra clase, entonces funciona bien.
    • Esta respuesta no enviar los datos json.
    • esto no funciona, cada vez que me falsificador cómo hacerlo vengo a este post y probar esta respuesta es incorrecta.
    • por favor, corrija la respuesta. La codificación JSON falta. El Contenido JSON-Tipo de falta. datos: JSON.stringify(conjunto de datos), contentType: «application/json; charset=utf-8»,
    • para la fijación evidente error si bien señalado por muchas personas durante años.
    • Esta no es, obviamente, el envío de JSON.

  2. 135
    var SendInfo= { SendInfo: [... your elements ...]};
    
            $.ajax({
                type: 'post',
                url: 'Your-URI',
                data: JSON.stringify(SendInfo),
                contentType: "application/json; charset=utf-8",
                traditional: true,
                success: function (data) {
                    ...
                }
            });

    y en la acción

    public ActionResult AddDomain(IEnumerable<PersonSheets> SendInfo){
    ...

    puede enlazar su matriz como esta

    var SendInfo = [];
    
    $(this).parents('table').find('input:checked').each(function () {
        var domain = {
            name: $("#id-manuf-name").val(),
            address: $("#id-manuf-address").val(),
            phone: $("#id-manuf-phone").val(),
        }
    
        SendInfo.push(domain);
    });

    espero que esto te puede ayudar.

    • ¿No es para que stringify ing el modelo se eleva algunos problemas de seguridad como pueden manipular los datos y se inserta algunas vulnerabilidades XSS?
    • no, un extremo (en este caso un controlador mvc función) debe NUNCA confiar en un cliente, por lo tanto, el XSS cheque debe ser hecho en el servidor. El controlador es el responsable de analizar los datos de manera correcta, y enviar los datos a la persona que llama (webapp). La persona que llama también podría ser algo como fiddler, o el cartero, o tal vez otra aplicación.. Espero que esto tenga sentido..
    • Para su INFORMACIÓN, el envío de un conjunto de caracteres con application/json no es válido. Conjunto de caracteres sólo se aplica al texto/* tipos. application/json es SIEMPRE la codificación UTF-8, independientemente de cualquiera de las cabeceras.
    • Cuando puedo reemplazar el tipo de datos con contentType en la solicitud, funciona.
    • Mi problema resuelto con el uso de JSON.stringify (), ¿alguien puede poco a explicar por qué necesitamos este tiempo, si alguien que envía un objeto json?
    • Probablemente debido a que el cuerpo, a través de la red, aspecto [object] en lugar de su cadena de valores. Usted estaría pidiendo el extremo, que probablemente serían de C#, para leer un objeto de JavaScript.

  3. 11

    Uso JSON.stringify(<data>).

    Cambiar su código: data: sendInfo a data: JSON.stringify(sendInfo).
    Espero que esto te puede ayudar.

    • Puede que sea necesario establecer el contentType a ‘application/json’ así. Algunos parámetros pueden adivinar, pero diciéndoles que es JSON es más fiable.
  4. 0

    Su PersonSheets tiene una propiedad int Id, Id no está en el post, para modelbinding falla. Hacer de Identificación nullable (int?) o enviar al menos Id = 0 con el POst .

  5. -2

    Usted no necesita llamar a $.toJSON y agregar traditional = true

    data: { sendInfo: array },
    traditional: true

    haría.

    • no hay buena elección ! Si sigo tu código, a continuación, el parámetro de método Add(object[] sendInfo) será nulo !

Dejar respuesta

Please enter your comment!
Please enter your name here