我正在渲染一個頁面,其中頁面的一部分是通過部分呈現的FORM。該表單上的提交按鈕通過Ajax發送到我的控制器(使用JQuery .post())。當控制器動作接管時,有兩種可能的執行路徑:在ASP.NET MVC中從Ajax Post返回狀態和HTML
表單數據有效。在這種情況下,控制器用新記錄更新數據庫,然後通過呈現PartialView返回HTML表(並返回ViewResult)。
表單數據無效。在這種情況下,我想重新渲染原始表單 - 突出顯示驗證失敗。我相信我可以用不同的PartialView調用來做到這一點。
在客戶端,在完成JavaScript函數中,我必須區分成功與失敗的情況,因爲返回的HTML的DOM目標將不同。我想我可以檢查一些已知元素的HTML來區分這些情況,但在我看來,更好的解決方案是返回一個JSonResult,該JSonResult在一個字段中包含布爾狀態,而在另一個字段中包含HTML。
我知道如何從控制器返回JsonResult。但是,我需要能夠從PartialView調用中捕獲HTML,以便將該文本粘貼到該字段中。有誰知道:
(一)如何做到這一點,和/或
(B)更好的方式來處理這種情況。
TIA
更新8/20/2009
我想我來接近我想要使用此代碼:
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;
}
不過,HTML字符串快到了空白,我期望它包含HTML,通常會通過調用
return PartialView("HospitalDoseList", hospitalStay);
我會隨你的想法去返回帶有HTML和狀態的json結果,而不是狀態是一個布爾值,如果你想要的不僅僅是一個狀態,它可能會更好一些,使它成爲某種枚舉成功/失敗 – cptScarlet 2009-08-19 01:48:15
當然。這就說得通了。我不知道如何從PartialView調用中獲取HTML字符串。 – 2009-08-19 01:54:33
對不起,我不熟悉MVC,但也許這個鏈接將幫助你。 http://bradwilson.typepad.com/blog/2008/08/partial-renderi.html – cptScarlet 2009-08-19 02:03:55