[Asp.net-mvc-3] Richtiger Weg, um AJAX Post in jquery zu verwenden, um Modell von stark typisierten MVC3-Ansicht zu übergeben


Answers

Ich habe 3 Möglichkeiten gefunden, dies umzusetzen:

C # -Klasse:

public class AddressInfo {
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string ZipCode { get; set; }
    public string Country { get; set; }
}

Aktion:

[HttpPost]
public ActionResult Check(AddressInfo addressInfo)
{
    return Json(new { success = true });
}

JavaScript kann man auf drei Arten machen:

1) Abfragezeichenfolge:

$.ajax({
    url: '/en/Home/Check',
    data: $('#form').serialize(),
    type: 'POST',
});

Daten hier ist eine Zeichenfolge.

"Address1=blah&Address2=blah&City=blah&State=blah&ZipCode=blah&Country=blah"

2) Objektarray:

$.ajax({
    url: '/en/Home/Check',
    data: $('#form').serializeArray(),
    type: 'POST',
});

Daten sind hier ein Array von Schlüssel / Wert-Paaren:

=[{name: 'Address1', value: 'blah'}, {name: 'Address2', value: 'blah'}, {name: 'City', value: 'blah'}, {name: 'State', value: 'blah'}, {name: 'ZipCode', value: 'blah'}, {name: 'Country', value: 'blah'}]

3) JSON:

$.ajax({
      url: '/en/Home/Check',
      data: JSON.stringify({ addressInfo:{//missing brackets
          Address1: $('#address1').val(),
          Address2: $('#address2').val(),
          City: $('#City').val(),
          State: $('#State').val(),
          ZipCode: $('#ZipCode').val()}}),
      type: 'POST',
      contentType: 'application/json; charset=utf-8'
});

Daten sind hier eine serialisierte JSON-Zeichenfolge. Beachten Sie, dass der Name mit dem Parameternamen im Server übereinstimmen muss !!

='{"addressInfo":{"Address1":"blah","Address2":"blah","City":"blah","State":"blah", "ZipCode", "blah", "Country", "blah"}}'
Question

Ich bin ein Anfänger-Web-Programmierer, also verzeihen Sie mir bitte, wenn einige meiner "Jargon" nicht korrekt sind. Ich habe ein Projekt mit ASP.NET unter Verwendung des MVC3-Frameworks.

Ich arbeite an einer Admin-Ansicht, in der der Administrator eine Liste von Geräten ändert. Eine der Funktionen ist eine Schaltfläche "Aktualisieren", mit der ich jquery verwenden möchte, um den Eintrag auf der Webseite dynamisch zu bearbeiten, nachdem ein Beitrag an die MVC-Steuerung gesendet wurde.

Ich gehe davon aus, dass dieser Ansatz in einer einzigen Admin-Umgebung "sicher" ist, in der es nur minimale Bedenken gibt, dass die Webseite nicht mehr mit der Datenbank synchronisiert ist.

Ich habe eine Ansicht erstellt, die stark typisiert ist und hoffte, die Modelldaten mit einem AJAX-Beitrag an die MVC-Steuerung weiterzugeben.

Im folgenden Beitrag habe ich etwas gefunden, das dem ähnlich ist, was ich mir vorstelle : JQuery Ajax und ASP.NET MVC3 verursachen Null-Parameter

Ich werde das Codebeispiel aus dem obigen Beitrag verwenden.

Modell:

public class AddressInfo 
{
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string ZipCode { get; set; }
    public string Country { get; set; }
}

Regler:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Check(AddressInfo addressInfo)
    {
        return Json(new { success = true });
    }
}

Skript in Ansicht:

<script type="text/javascript">
var ai = {
    Address1: "423 Judy Road",
    Address2: "1001",
    City: "New York",
    State: "NY",
    ZipCode: "10301",
    Country: "USA"
};

$.ajax({
    url: '/home/check',
    type: 'POST',
    data: JSON.stringify(ai),
    contentType: 'application/json; charset=utf-8',
    success: function (data.success) {
        alert(data);
    },
    error: function () {
        alert("error");
    }
});
</script>

Ich habe bisher keine Gelegenheit gehabt, das Obige zu verwenden. Aber ich frage mich, ob dies die "beste" Methode war, um die Modelldaten mit AJAX an die MVC-Steuerung zurück zu geben?

Sollte ich besorgt sein, die Modellinformationen offen zu legen?