【发布时间】: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