/ / render stronę z modelem po ajax post - jquery, ajax, asp.net-mvc

renderuj stronę z modelem po ajax post - jquery, ajax, asp.net-mvc

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 № 1

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