Asp.net mvc 在ASP.NET MVC中从Ajax帖子返回状态和HTML
我正在呈现一个页面,其中页面的一部分是表单——通过部分。表单上的submit按钮通过Ajax(使用JQuery.post())发布到我的控制器。当控制器操作接管时,有两种可能的执行路径:Asp.net mvc 在ASP.NET MVC中从Ajax帖子返回状态和HTML,asp.net-mvc,Asp.net Mvc,我正在呈现一个页面,其中页面的一部分是表单——通过部分。表单上的submit按钮通过Ajax(使用JQuery.post())发布到我的控制器。当控制器操作接管时,有两种可能的执行路径: 表单数据是有效的。在这种情况下,控制器使用新记录更新数据库,然后通过呈现PartialView(并返回ViewResult)返回HTML表 表单数据无效。在本例中,我希望重新呈现原始表单——突出显示验证失败。我相信我可以用不同的PartialView调用来实现这一点 在客户端,在completionjavasc
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);
我建议最简单的方法是通过提交按钮触发单独的验证和post操作。首先要执行一个AJAX验证/post,返回JSON状态和可能的验证错误(字符串)数组。实际上,一个空的列表可能足以作为成功的证据,因此您可能会忽略状态。完成服务器端验证后,通过AJAX调用另一个操作来检索要显示的数据。此操作将呈现部分视图并返回HTML。我本来打算将其粘贴在注释中,但文本太多了 返回AJAX状态代码的模式非常常见,请查看我在这里的文章:以及这篇博客文章:
至于部分视图,您有点运气不好-ViewResults需要调用ExecuteResult(),然后直接将html呈现给响应。你需要想出一个不同的策略,也许像tvanfosson所建议的那样。我同意你的想法,返回json结果时使用HTML和状态,但是如果你想要的不仅仅是成功/失败的状态,那么最好将状态设置为某种枚举,而不是布尔值。这是有道理的。我不知道如何从PartialView调用中获取HTML字符串。对不起,我不熟悉MVC,但是这个链接可能会帮助您。好吧,在我发布代码片段后,我发现这篇文章指出IView.Render的TextWriter参数被忽略了?!这是一个有趣的想法。但是,我想利用视图中的Html.Validation扩展方法,这些方法在ViewData的ModelState中显示验证错误。我想我看到了关于IView.Render的一些内容,它允许将视图呈现为响应流以外的其他内容(例如内存流)。我会沿着这些线再挖一些…我已经挖了。。不幸的是,这不会让你走得太远。问题是PartialView.View在调用ExecuteReader()之前是空的。。然后,如果尝试对视图调用Render(),它只会返回一个空字符串,因为它已由视图引擎渲染和释放。如果你真的找到了方法,请把它贴出来。