Jestem początkującym programistą internetowym, więc wybacz mi, jeśli któryś z moich „żargonów” nie jest poprawny. Mam projekt wykorzystujący ASP.NET przy użyciu frameworka MVC3.
Pracuję nad widokiem administratora, w którym administrator będzie modyfikował listę sprzętu. Jedną z funkcji jest przycisk "aktualizuj", którego chcę użyć jquery do dynamicznej edycji wpisu na stronie po wysłaniu posta do kontrolera MVC.
Przypuszczam, że to podejście jest „bezpieczne” w przypadku pojedynczego ustawienia administratora, w którym istnieje minimalna obawa, że strona internetowa nie będzie zsynchronizowana z bazą danych.
Stworzyłem widok, który jest silnie wpisany i miałem nadzieję przekazać dane modelu do kontrolki MVC za pomocą posta AJAX.
W poniższym poście znalazłem coś, co jest podobne do tego, na co patrzę: JQuery Ajax i ASP.NET MVC3 powodujące parametry zerowe
Wykorzystam przykładowy kod z powyższego postu.
Model:
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; }
}
Kontroler:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Check(AddressInfo addressInfo)
{
return Json(new { success = true });
}
}
skrypt w widoku:
<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>
Nie miałem jeszcze okazji skorzystać z powyższego. Ale zastanawiałem się, czy jest to „najlepsza” metoda przekazywania danych modelu z powrotem do kontrolki MVC przy użyciu AJAX?
Czy powinienem się martwić ujawnieniem informacji o modelu?
źródło
Znalazłem 3 sposoby na wdrożenie tego:
Klasa C #:
Akcja:
JavaScript, możesz to zrobić na trzy sposoby:
1) Ciąg zapytania:
Dane tutaj to ciąg.
"Address1=blah&Address2=blah&City=blah&State=blah&ZipCode=blah&Country=blah"
2) Tablica obiektów:
Dane to tablica par klucz / wartość:
3) JSON:
Dane to serializowany ciąg JSON. Zauważ, że nazwa musi pasować do nazwy parametru na serwerze !!
źródło
data: $('input, textarea, select').serialize(),
do mojej pracy.Tak to zadziałało dla mnie:
źródło
to, co masz, jest w porządku - jednak aby zaoszczędzić trochę pisania, możesz po prostu użyć dla swoich danych
zobacz http://www.ryancoughlin.com/2009/05/04/how-to-use-jquery-to-serialize-ajax-forms/, aby uzyskać szczegółowe informacje, składnia jest dość prosta.
źródło
Jeśli korzystasz z MVC 5, przeczytaj to rozwiązanie!
Znam pytanie dotyczące MVC 3, ale natknąłem się na tę stronę z MVC 5 i chciałem opublikować rozwiązanie dla każdego innego w mojej sytuacji. Wypróbowałem powyższe rozwiązania, ale u mnie nie zadziałały, nigdy nie dotarłem do Action Filter i nie mogłem zrozumieć dlaczego. Używam wersji 5 w moim projekcie i otrzymałem następujący filtr akcji:
- Zanotuj
using System.Web.Mvc
iusing System.Web.Mvc.Filters
, niehttp
biblioteki (myślę, że jest to jedna z rzeczy, które zmieniły się w MVC v5. -Następnie po prostu nałóż filtr
[ValidateJSONAntiForgeryHeader]
do akcji (lub kontrolera) i powinna zostać poprawnie wywołana.Na mojej stronie układu tuż powyżej
</body>
mam@AntiForgery.GetHtml();
Na koniec na mojej stronie Razor wykonuję wywołanie Ajax w następujący sposób:
źródło
data: $("#the-form").serialize()
?