[英]Using ViewRenderer for rendering a PartialView in SignalR response?
我要在SignalR類(集線器)中渲染局部視圖
因此,我在BaseHub類中創建了一個方法:
protected static string RenderPartialToString(string view, object model)
{
// Create an arbitrary controller instance
EmptyController controller = ViewRenderer.CreateController<EmptyController>();
// view = "~/Views/Partials/UploadedFilePartial.cshtml"
// model = List<AttachmentModel>
string html = ViewRenderer.RenderPartialView(view, model, controller.ControllerContext);
return html;
}
但是在ViewRenderer
的以下行中,我得到一個異常:
// first find the ViewEngine for this view
ViewEngineResult viewEngineResult = partial
? ViewEngines.Engines.FindPartialView(Context, viewPath)
: ViewEngines.Engines.FindView(Context, viewPath, null);
例外: Response is not available in this context.
堆棧跟蹤:
at System.Web.HttpContext.get_Response()
at System.Web.HttpContextWrapper.get_Response()
at System.Web.WebPages.CookieBrowserOverrideStore.GetOverriddenUserAgent(HttpContextBase httpContext)
at System.Web.WebPages.BrowserHelpers.GetOverriddenUserAgent(HttpContextBase httpContext)
at System.Web.WebPages.BrowserHelpers.GetOverriddenBrowser(HttpContextBase httpContext, Func`2 createBrowser)
at System.Web.WebPages.BrowserHelpers.GetOverriddenBrowser(HttpContextBase httpContext)
at System.Web.WebPages.DisplayModeProvider.<.ctor>b__2(HttpContextBase context)
at System.Web.WebPages.DefaultDisplayMode.CanHandleContext(HttpContextBase httpContext)
at System.Web.WebPages.DisplayModeProvider.<GetAvailableDisplayModesForContext>d__4.MoveNext()
at System.Web.Mvc.VirtualPathProviderViewEngine.GetPath(ControllerContext controllerContext, String[] locations, String[] areaLocations, String locationsPropertyName, String name, String controllerName, String cacheKeyPrefix, Boolean useCache, String[]& searchedLocations)
at System.Web.Mvc.VirtualPathProviderViewEngine.FindPartialView(ControllerContext controllerContext, String partialViewName, Boolean useCache)
at System.Web.Mvc.ViewEngineCollection.<>c__DisplayClass2.<FindPartialView>b__0(IViewEngine e)
at System.Web.Mvc.ViewEngineCollection.Find(Func`2 lookup, Boolean trackSearchedPaths)
at System.Web.Mvc.ViewEngineCollection.Find(Func`2 cacheLocator, Func`2 locator)
at System.Web.Mvc.ViewEngineCollection.FindPartialView(ControllerContext controllerContext, String partialViewName)
at Smartiz.Admin.ViewRenderer.RenderViewToStringInternal(String viewPath, Object model, Boolean partial) in d:\My Works\C Sharp\Smartiz\Smartiz v2.0\Smartiz.Admin\Classes\ViewRenderer.cs:line 129
at Smartiz.Admin.ViewRenderer.RenderPartialViewToString(String viewPath, Object model) in d:\My Works\C Sharp\Smartiz\Smartiz v2.0\Smartiz.Admin\Classes\ViewRenderer.cs:line 74
at Smartiz.Admin.ViewRenderer.RenderPartialView(String viewPath, Object model, ControllerContext controllerContext) in d:\My Works\C Sharp\Smartiz\Smartiz v2.0\Smartiz.Admin\Classes\ViewRenderer.cs:line 110
at Smartiz.Admin.BaseHub.RenderPartialToString(String view, Object model) in d:\My Works\C Sharp\Smartiz\Smartiz v2.0\Smartiz.Admin\SignalR\BaseHub.cs:line 55
at Smartiz.Admin.FileLeecherHub.GetFileFromWeb(String fileUrl, Int32 deviceId, Int32 wikiId, Int32 contentId) in d:\My Works\C Sharp\Smartiz\Smartiz v2.0\Smartiz.Admin\SignalR\FileLeecherHub.cs:line 102
PS:
我在以下鏈接中了解了ViewRenderer
http://www.codemag.com/Article/1312081
您可以在以下鏈接中找到ViewRenderer
: https : //github.com/RickStrahl/WestwindToolkit/blob/master/Westwind.Web.Mvc/Utils/ViewRenderer.cs
我終於可以找到解決方案:
在我的局部視圖中,我使用了Html.TextBox
和Url.Content
。 我認為問題與他們有關。
在Google中搜索很多次之后,我找到了RazorEngine ,並且可以通過以下方式解決我的問題:
protected static string RenderPartialToString(string view, object model)
{
string partialViewPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, view.Replace("~/", ""));
string template = File.ReadAllText(partialViewPath);
DynamicViewBag viewBag = new DynamicViewBag();
viewBag.AddValue("UploadFileFromUrl", true);
string html = Razor.Parse(template, model, viewBag, null);
return html;
}
PS:
我在局部視圖中替換了Html.TextBox
和Url.Content
。 因為RazorEngine
遇到了問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.