Ich rendere eine Seite, wo ein Teil der Seite eine FORM ist - gerendert über eine partielle. Die Schaltfläche "Senden" auf diesem Formular wird über Ajax an meinen Controller gesendet (mit JQuery .post()). Wenn die Controller-Aktion übernimmt, gibt es zwei mögliche Ausführungspfade:Zurückgeben von Status und HTML von Ajax Post in ASP.NET MVC
Die Formulardaten sind gültig. In diesem Fall aktualisiert der Controller die Datenbank mit einem neuen Datensatz und gibt dann eine HTML-Tabelle durch Rendern einer PartialView zurück (und gibt ein ViewResult zurück).
Die Formulardaten sind ungültig. In diesem Fall möchte ich das ursprüngliche Formular erneut darstellen, wobei die Überprüfungsfehler hervorgehoben sind. Ich glaube, ich kann dies mit einem anderen PartialView-Aufruf tun.
Auf der Clientseite, bei der Fertigstellung JavaScript-Funktion, ich habe zwischen dem Erfolg und Misserfolg Fällen zu unterscheiden, da der DOM Ziel für den zurückgegebene HTML anders sein wird. Ich denke, ich könnte den HTML-Code auf ein bekanntes Element untersuchen, um die Fälle zu unterscheiden, aber mir erschien es besser, ein JSonResult zurückzugeben, das einen booleschen Status in einem Feld und den HTML-Code in einem anderen enthält.
Ich weiß, wie man ein JsonResult von der Steuerung zurückgibt. Allerdings muss ich in der Lage sein, den HTML-Code aus den PartialView-Aufrufen zu erfassen, um diesen Text in das Feld einzubetten. Hat jemand wissen:
(a), wie dies zu tun, und/oder
(b) ein besserer Weg, um die Situation zu nähern.
TIA
aktualisieren 8/20/2009
Ich glaube, ich bin nahe kommt, was ich mit diesem Code möchte:
ViewEngineResult viewEngineResult = ViewEngines.Engines.FindPartialView(this.ControllerContext, "HospitalDoseList");
ViewData.Model = hospitalStay;
ViewContext viewContext = new ViewContext(ControllerContext, viewEngineResult.View, this.ViewData, this.TempData);
using (StringWriter writer = new StringWriter()) {
viewEngineResult.View.Render(viewContext, writer);
string html = writer.ToString();
JsonResult jsonResult = new JsonResult();
jsonResult.Data = new {Status = true, Html = HttpUtility.HtmlEncode(html)};
return jsonResult;
}
jedoch die HTML-String aufkommt blank, wo ich erwartet habe, dass es den HTML-Code enthält, der normalerweise für den Antwortstream über einen Anruf an
01 gerendert würde
Ich würde mit Ihrer Idee gehen, das Json-Ergebnis mit dem HTML und einem Status zurückzugeben, aber statt Status ein boolescher zu sein, könnte es ein wenig besser sein, es zu einer Aufzählung irgendeiner Art zu machen, falls Sie mehr als nur einen Status wollen von Erfolg/Misserfolg – cptScarlet
Sicher. Das macht Sinn. Ich weiß nicht, wie ich die HTML-Zeichenfolgen aus den PartialView-Aufrufen abrufen kann. –
Sorry, ich kenne MVC nicht, aber vielleicht hilft Ihnen dieser Link. http://bradwilson.typepad.com/blog/2008/08/partial-renderi.html – cptScarlet