MVC4 RenderViewToString不尊重移动视图

时间:2015-05-13 06:42:34

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我正在为asp.net MVC4网站构建移动视图,但遇到了问题。我们有很多地方可以将视图转换为字符串,但这种方法似乎不适用于displaymodes,因此总是找到默认视图。例如。 index.cshtml而不是index.mobile.cshtml。

为了使这些代码符合移动显示模式,缺少什么想法?

public string RenderViewToString(string viewName, object model)
    {
        ViewData.Model = model;
        using (var sw = new StringWriter())
        {
            var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);

            if (viewResult.View == null)
            {
                var message = String.Format("View '{0}' not found. Searched in the following locations {1}.",
                    viewName, String.Join(", ", viewResult.SearchedLocations));
                throw new Exception(message);
            }

            var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
            viewResult.View.Render(viewContext, sw);
            viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
            return stripWhitespaceRx.Replace(sw.GetStringBuilder().ToString(), " ").Trim();
        }
    }

1 个答案:

答案 0 :(得分:0)

使用预期视图初始化参数“viewName”。

例如,在调用RenderViewToString之前,请指定Request对象的基于viewName的USER AGENT。

if(Request.Browser.IsMobileDevice)
{
  viewName = "~/Views/index.mobile.cshtml";
}
else
{
  viewName = "~/Views/index.cshtml";
}