Ich habe cshtml Seite. Auf der Seite habe ich Details
<div>
Tag. Ich beziehe dieses div-Tag, indem ich Ajax-Abfragen mache und eine Teilansicht innerhalb dieses div-Tags anfüge. Das funktioniert gut.Asp.Net Ajax: Wie man auf der gleichen Seite bleibt, ohne dynamisch hinzugefügte Kontrollen zu verlieren?
Dann im Einreichen des gesamten Formulars mit Ajax Helfer. Wenn der Modellstatus auf dem Server ungültig ist, möchte ich auf der gleichen Seite bleiben, damit die Fehlermeldung auf der Seite angezeigt werden kann. Allerdings entfernt dies jeden HTML-Code, der innerhalb des div-Tags hinzugefügt wurde.
cshtml
@using (Ajax.BeginForm("Create", "Campaign", new AjaxOptions { HttpMethod = "POST" }))
{
*** some html here ****
<button class="btn btn-default" id="AddNewRow" type="button">Add New Row</button>
<div id="Details"></div>
<button type="submit" class="btn btn-default">Submit</button>
}
Javascript
$("#AddNewRow").click(function() {
$.ajax({
cache: false,
async: false,
url: someurl
}).success(function (partialView) {
$("#Details").append(partialView);
});
});
-Controller
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(CampaignVM model)
{
if (!ModelState.IsValid)
{
//What should i return here so error will show on the same page and also keeps the rows i added using ajax
//if i do 'return View("Create",model)' then all the details row i created using ajax query gets removed
}
return RedirectToAction("Index", "Home");
}
Sie scheinen zu missverstehen, was Ajax ist. Es bleibt immer auf der gleichen Seite und wird nie umgeleitet (mit einem 'return RedirectToAction (" Index "," Home ");' ist sinnlos, wenn Sie einen Ajax-Anruf machen). Sie haben noch nicht einmal 'AjaxOptions' angegeben (z. B. für die Ziel-ID, die aktualisiert werden soll), daher ist unklar, wo der Sinn dahinter liegt. Wenn Sie es umleiten, weil Sie 'jquery.unobtrusive-ajax.js' nicht eingeschlossen haben und daher eine normale Übermittlung vornehmen. –