我正在寻找使用剃刀引擎更新MVC3中部分区域的几点建议。
现在,我正在使用jquery来获取ajax请求。
一个小背景:我有一个"收藏"我在局部视图中包装,只是在相关视图的模型对象的列表中执行for-each。
然后我有一个"添加集合"按钮,只显示一个模态对话框,其中包含用于添加新集合的表单。点击"添加" ajax请求在数据库中创建集合,并且当前返回一个JSON对象,指示成功以及字符串" Collection Created"。在我的jquery ajax处理程序中,我检查了这个json对象,检查状态是否为"成功"然后使用jquery显示类似咆哮的通知,包含" Collection Created"字符串。
现在我的问题是:无论如何我可以在这个ajax请求中更新我的收藏列表吗?无论如何我可以抛出局部视图,迭代集合,以某种方式返回成功的json对象?
非常简单:我想以某种方式更新HTML,但仍然维护JSON对象,因此我可以显示我的通知。
答案 0 :(得分:1)
您始终可以在提交处理程序中发出两个ajax请求。每个请求都会调用不同的控制器操作(Create,List)。
如果这对您不起作用,您是否考虑在部分内显示成功消息?
答案 1 :(得分:1)
是的,您可以将partial渲染为字符串并将其包装为JSON。我使用这种方法相当多,但我听说有人说这是不好的做法。到目前为止,我没有遇到任何问题,而且我已经使用了几年。
我实际上使用了返回JSON的自定义ActionResult。它包装了多个视图,并将它们作为字符串数组发送回客户端。 “不那么直接”位是将视图呈现为控制器动作中的字符串。这是一些代码:
public static string RenderViewToString(ControllerContext controllerContext, string viewPath, ViewDataDictionary viewData, TempDataDictionary tempData)
{
ViewEngineResult result = ViewEngines.Engines.FindPartialView(controllerContext, viewPath);
if (result == null || result.View == null)
throw new Exception("No view found for the following path: " + viewPath);
ViewContext viewContext = new ViewContext(controllerContext, result.View, viewData, tempData, new StringWriter());
HtmlHelper helper = new HtmlHelper(viewContext, new ViewPage());
return helper.Partial(viewPath, viewData).ToHtmlString();
}