【问题标题】:Updating partial area MVC3更新部分区域 MVC3
【发布时间】:2011-05-09 07:33:39
【问题描述】:

我正在寻找一些关于使用 razor 引擎更新 MVC3 中的部分区域的建议。

现在,我正在使用 jquery 来处理 ajax 请求。

一点上下文:我有一个“集合”列表,我将其包装在部分视图中,只是在相关视图的模型对象中的列表上执行一个 for-each。

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

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

简单地说:我想以某种方式更新 HTML,但仍保留 JSON 对象,以便显示我的通知。

【问题讨论】:

  • 为什么不在提交处理程序中发出两个请求?这样,每个控制器操作将只做一件事。
  • 对不起。你能详细说明一下吗?您的意思是,在验证创建请求“成功”时的“更新列表”-ajax 请求?
  • 可以,而且每个请求都可以调用不同的控制器动作(Create、List)。
  • 看看我为什么没有想到这一点。我会试一试,看看它是否让我满意。你能创建一个快速的答案,所以如果它坚持下去我可以接受吗?谢谢;)
  • 那里,我已经把它作为一个答案,并给你一个更多的想法:)

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


【解决方案1】:

是的,您可以将部分渲染为字符串并将其包装为 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();
    }

【讨论】:

  • 这看起来也很酷。我认为第一种方法是首选,因为它只是一个额外的 ajax 请求。但如果我需要更新多个区域,我可以看到自己在未来尝试这样做。如果有人愿意提供一些指点,我很想听听更多关于“不良做法”的含义和背后的推理?
【解决方案2】:

您始终可以在提交处理程序中发出两个 ajax 请求。每个请求都会调用不同的控制器操作(创建、列表)。

如果这对您不起作用,您是否考虑过在部分中显示成功消息?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多