【问题标题】:Is it possible to render a view outside a controller?是否可以在控制器外部呈现视图?
【发布时间】:2011-09-20 15:20:21
【问题描述】:

我想知道是否可以从非控制器的类中呈现视图。我看到的一切似乎都在说你不能。

我正在尝试从 WCF Web 服务呈现部分视图,以便将其推送到其他地方。是否可以为此使用视图引擎?

谢谢!

更新:

我不断收到 HtmlHelper 的参数 null 异常。这是我的代码和堆栈跟踪。我的部分确实被命名为 TableOfContent.cshtml 并且位于 /View/Shared 文件夹中。我是不是要以不同的方式实例化我的 ViewContext ?

HtmlHelper helper = new HtmlHelper(new ViewContext(), viewData);
var a = helper.Partial("TableOfContent");

   at System.Web.Mvc.ViewContext..ctor(ControllerContext controllerContext, IView view, ViewDataDictionary viewData, TempDataDictionary tempData, TextWriter writer)
   at System.Web.Mvc.HtmlHelper.RenderPartialInternal(String partialViewName, ViewDataDictionary viewData, Object model, TextWriter writer, ViewEngineCollection viewEngineCollection)
   at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName, Object model, ViewDataDictionary viewData)
   at System.Web.Mvc.Html.PartialExtensions.Partial(HtmlHelper htmlHelper, String partialViewName)
   at SyncInvokeProcessEvent(Object , Object[] , Object[] )
   at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
   at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)

【问题讨论】:

    标签: asp.net-mvc-3 wcf-binding


    【解决方案1】:

    This will call the view 无需控制器(用于局部视图)。

    Html.Partial(partialViewName);
    

    另见Html.Partial method overload

    【讨论】:

    • “HTML”对象的类型是“HTMLHelper”。要实例化它,您需要一个 ViewContext。要实例化 ViewContext 你需要一个 ControllerContext... 回到同样的问题。没有控制器。
    【解决方案2】:

    这里有两种不同的想法可供考虑:

    1. 我使用RazorEngine 做了类似的事情。允许您将剃刀模板呈现为字符串。
    2. 创建一个控制器并使用 WebClient 调用该操作。这假设您有一个 MVC 应用程序。

    【讨论】:

      猜你喜欢
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-16
      • 1970-01-01
      • 2016-04-10
      相关资源
      最近更新 更多