更新部分区域MVC3

时间:2011-05-09 07:33:39

标签: c# jquery asp.net-mvc ajax razor

我正在寻找使用剃刀引擎更新MVC3中部分区域的几点建议。

现在,我正在使用jquery来获取ajax请求。

一个小背景:我有一个"收藏"我在局部视图中包装,只是在相关视图的模型对象的列表中执行for-each。

然后我有一个"添加集合"按钮,只显示一个模态对话框,其中包含用于添加新集合的表单。点击"添加" ajax请求在数据库中创建集合,并且当前返回一个JSON对象,指示成功以及字符串" Collection Created"。在我的jquery ajax处理程序中,我检查了这个json对象,检查状态是否为"成功"然后使用jquery显示类似咆哮的通知,包含" Collection Created"字符串。

现在我的问题是:无论如何我可以在这个ajax请求中更新我的收藏列表吗?无论如何我可以抛出局部视图,迭代集合,以某种方式返回成功的json对象?

非常简单:我想以某种方式更新HTML,但仍然维护JSON对象,因此我可以显示我的通知。

2 个答案:

答案 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();
    }