Czy możliwe jest wysłanie żądania postu ajax, a kontroler zwraca model, po którym strona jest renderowana za pomocą tego modelu? Aby zilustrować, co mam na myśli, powiedzmy, że mamy prosty post ajax:
$.ajax({
url: "/Home/PostReq",
data: JSON.stringify(data),
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
dataType: "html",
cache: false,
async: true,
error: function (jqXHR, error, errorThrown) {
//display error
}
})
A w kontrolerze domowym mam:
[HttpPost]
public ActionResult PostReq(MyModel model)
{
//do some changes to model
//render view with new model
return View(model);
}
Jak to osiągnąć? W tej chwili nic to nie robi, strona nie odświeża się ani nie renderuje ponownie. Czy można to zrobić z żądania ajax?
Używam ajax, ale nie używam modelu do wiązania danych formularza, ponieważ jest on dynamiczny i, jak rozumiem, nie mogę dynamicznie powiązać danych formularza z modelem.
Odpowiedzi:
3 dla odpowiedzi № 1Dodać success
oddzwonienie do twojego $.ajax
, zapewni ci to wynik posta (w tym przypadku HTML), coś w stylu:
$.ajax({
url: "/Home/PostReq",
data: JSON.stringify(data),
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
dataType: "html",
cache: false,
async: true,
error: function (jqXHR, error, errorThrown) {
//display error
},
success: function (data, textStatus, jqXHR) {
$("body").html(data);
}
})
Byłoby to łatwiejsze przy częściowym widoku niż wymianie całego ciała.
2 dla odpowiedzi nr 2
Tak, oczywiście, można to zrobić. Jest kilka rzeczy, o których należy pamiętać
1) Przede wszystkim zwrócony widok po poście powinien być widokiem częściowym, a nie pełnym widokiem
2) Musisz umieścić div kontenera w głównym widoku, w którym zostanie dołączony widok częściowy odpowiedzi z wywołania ajax to sukces callback.
Mam na myśli to, że w głównym widoku będziesz miał:
<div id="container">
<div>
aw funkcji wywoływania ajax dołączaj odpowiedź do div kontenera, np .:
$.ajax({
url: "/Home/PostReq",
data: JSON.stringify(data),
type: "POST",
contentType: "application/json; charset=utf-8",
dataType: "json",
cache: false,
async: true,
error: function (jqXHR, error, errorThrown) {
//display error
}
success: function(response) {
$("#container").html(response);
}
})