Jak przekazałbyś obiekty z MVC i jQuery AJAX?


W końcu eksperymentuję i próbuję nauczyć się MVC po latach asp.net.

Jestem przyzwyczajony do korzystania z asp.net AJAX PageMethods, w którym można przekazać obiekt, który jest automatycznie analizowany do dowolnego typu parametru w tej metodzie.
Javascript:
PageMethods.AddPerson({First:"John",Last:"Doe"});

Za kodem:
[WebMethod]
public static Result AddPerson(Person objPerson)
{
return Person.Save();
}


Jak mam to zrobić za pomocą MVC i jQuery?

Czy potrzebowałeś tylko wysyłaje i zdemontować JSON do obiektu?

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz zrobić coś takiego:
var person = {};
person["First"] = $("#FirstName").val();
person["Last"] = $("#LastName").val(); $.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "/Admin/AddPerson",
data: JSON.stringify(person),
dataType: "json",
success: function(result) { },
error: function(result) { }
});

a następnie na kontrolerze administratora:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AddRelease(Person p)
{
// Code to add person }

Dostępna metoda JSON.stringify

tutaj
http://www.json.org/... Możesz również użyć obiektu Model zamiast obiektu Person jako parametru, abyś mógł obsłużyć całą weryfikację.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

To zależy od tego, jak złożone będą dane w formularzu. Weźmy przykład jQuery:
$.ajax({
url: '\Persons\AddPerson',// PersonsController, AddPerson Action
data: { First: "John", Last: "Doe" },
type: 'POST',
success: function(data, status)
{
alert('Method called successfully!');
}
});

Dlatego publikujemy dwie części danych. Jeśli klasa Person ma dwie właściwości o nazwach „First” i „Last”, domyślny spinacz modelu ASP.NET MVC nie powinien mieć problemu z umieszczeniem danych formularza w tych właściwościach (wszystko inne będzie domyślne).
Oczywiście zawsze możesz utworzyć niestandardowe powiązanie modelu dla typu Person, a następnie możesz przyjąć dowolne wartości formularza i umieścić je w dowolnej właściwości lub wywołać inny rodzaj logiki.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Mam post dotyczący wywołań AJAX do metod akcji ASP.NET MVC. Obejmuje następujące kombinacje:
  • HTTP do ciebie, POST
  • Metody jQuery $ .you, .getJSON $, $ .post
  • Wysyłanie parametrów do metod akcji
  • Zwróć parametry (ciągi i JSON) z metod akcji
  • Dane formularza księgowania
  • Ładowanie częściowego widoku MVC przez AJAX

AJAX wywołuje metody akcji ASP.NET MVC przy użyciu jQuery
http://bobcravens.com/2009/11/ ... uery/
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Gdy POSTUJESZ formularz za pośrednictwem ajax do metody akcji na kontrolerze, architektura ModelBinder zaczyna analizować przesłane wartości formularza do obiektów biznesowych. Możesz użyć powiązania modelu na kilka różnych sposobów.
public ActionResult MyAction(MyObject obj)
{
}

W powyższym przykładzie ModelBinder domyślnie próbuje utworzyć
MyObject
z informacji uzyskanych w zapytaniu.
public ActionResult MyAction(FormCollection stuff)
{
MyObject obj = new MyObject();
TryUpdateModel(obj);
}

Tutaj jawnie próbujemy powiązać przesłane dane formularza z utworzonym przez nas obiektem. W ModelBinder spróbujemy dopasować umieszczone wartości do właściwości obiektu.
W obu przypadkach możesz zapytać obiekt
ModelState
, aby sprawdzić, czy wystąpiły jakieś błędy podczas tłumaczenia rozbitych wartości na obiekt.
Wprowadzenie do wiązania modelu

Spójrz tutaj
http://msdn.microsoft.com/en-u ... .aspx
.
Dowiedz się więcej o wiązaniu modeli z listami i słownikami

zobacz artykuł Phila Haacka
http://haacked.com/archive/200 ... .aspx
.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Myślę, że jestem oszustem i wykonuję następujące czynności:
$("#ProgressDialog").dialog({
autoOpen: false,
draggable: false,
modal: true,
resizable: false,
title: "Loading",
closeOnEscape: false//,// open: function () { $(".ui-dialog-titlebar-close").hide(); }// Hide close button
});
$("form").live("submit", function (event) {
event.preventDefault();
var form = $(this);
$("#ProgressDialog").dialog("open");
$.ajax({
url: form.attr('action'),
type: "POST",
data: form.serialize(),//USE THIS to autoserialize!
success: function (data) {
$("#dialog").dialog({height:0});
},
error: function (jqXhr, textStatus, errorThrown) {
alert("Error '" + jqXhr.status + "' (textStatus: '" + textStatus + "', errorThrown: '" + errorThrown + "')");
},
complete: function () {
$("#ProgressDialog").dialog("close"); }
});
});
});<div id="ProgressDialog" style="text-align: center; padding: 50px;">
<img src="@Url.Content("~/Content/ajax-loader.gif")" width="128" height="15" alt="Loading"/>

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się