【问题标题】:MVC4 RenderViewToString not respecting mobile viewsMVC4 RenderViewToString 不尊重移动视图
【发布时间】:2015-05-16 00:41:20
【问题描述】:

我正在为一个 asp.net MVC4 站点构建移动视图,但遇到了一个问题。我们有很多地方可以将视图转换为字符串,但这种方法似乎不适用于显示模式,因此总是找到默认视图。例如。 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();
        }
    }

【问题讨论】:

  • 你需要传递一个显式的参数来显示移动视图,它不知道它是否是移动的。
  • 我想了很多,但不知道在哪里传递这个论点。到目前为止,我最好的解决方案是,在视图名称中确保我首先尝试找到移动版本,然后如果没有找到则回退到默认值。但感觉不太对劲。
  • 您需要在上面的方法调用之前创建一些东西,视图名称应该是移动的或在对象中(如果它是一个视图模型或创建一个可能称为 IsMobile 的属性,并且取决于它是否是移动的相应行为)。
  • 好的,谢谢,这也是我想出的。我只是希望有更好的解决方案:)

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 2021-10-18
    • 2021-09-06
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多