it-swarm.com.de

Senden Sie JSON-Daten über POST (Ajax) und Json-Antwort vom Controller (MVC) empfangen

Ich habe eine Funktion in Javascript erstellt:

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

Ich rief die jquery.json-2.3.min.js-Skriptdatei an und verwendete sie für die toJSON(array)-Methode.

Im Controller habe ich diese Add-Aktion

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

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

}

Aber sendInfo als Methodenparameter wird zu Null.

Das Model:

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

Wie kann ich eine Aktion durchführen, wenn die Daten mit POST gesendet wurden?

Ich weiß nicht, wie ich damit umgehen soll. Es ist auch möglich, die Antwort (an ajax) über JSON zurückzusenden.

Vielen Dank

112
Snake Eyes

Erstellen Sie ein Modell

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

Controller wie unten

    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>
89
Praveen Prasad
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) {
                ...
            }
        });

und in Aktion 

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

sie können Ihr Array so binden

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

hoffe das kann dir helfen.

124
Neha

Verwenden Sie JSON.stringify(<data>).

Ändern Sie Ihren Code: data: sendInfo in data: JSON.stringify(sendInfo). Hoffe, das kann Ihnen helfen.

8
Hiep Nguyen

Ihre PersonSheets haben eine Eigenschaft int Id, Id ist nicht im Beitrag, daher schlägt die Modellbindung fehl. Machen Sie Id zu Null (int?) Oder senden Sie mindestens eine Id = 0 mit dem POst.

0
Kirsten