【问题标题】:ASP.NET MVC site that works for mobile and non-mobile sites?适用于移动和非移动站点的 ASP.NET MVC 站点?
【发布时间】:2012-05-11 06:52:17
【问题描述】:

我正在开发一个网站,使用带有 .aspx 页面的 ASP.NET MVC3。网站支持桌面浏览器和手机同站。该站点有一个母版页。我想避免重定向到移动网站,因为这会重复很多 html。我仍然打算使用用户代理来确定移动设备何时访问该站点,但我没有重定向浏览器,而是设置了一个标志,我在母版页中使用它来控制生成的 HTML。

我在确定让母版页生成所需 HTML 的最佳方法时遇到了麻烦。我有两种解决这个问题的策略,但我不知道这是否是最好的方法。

第一个策略是,使用移动标志添加、替换或删除特定于移动设备的 HTML 内容。 优点:最大限度地减少 HTML 的重复 缺点:多个 if 语句。 需要下载第二个特定于移动设备的 .css。 (由于 html 有多个 if 语句,我们确实需要 2 个 css 文件,一个用于移动端,一个用于非移动端。我们不能轻易使用特定规则在一个 css 文件中处理)。

以下是使用此策略的母版页的摘录:

    <% if (isMobile)
    {  
        Html.RenderPartial("MobileSearchControls");
    }
    else                       
    { %>
            <div id="viewTabs" class="span3">
            ...
            </div>      
   <%  }
   %>            
        <%--body --%>
        <div id="bd" class="row-fluid">
            <% if (!isMobile)
               { %>
            <div id="left-column" class="span3">
                <div id='controls-and-preferences'>
                    <asp:ContentPlaceHolder ID="LeftColumnContent" runat="server" />
                </div> 
            </div><!--left-column -->
            <% }
            %>
            <div id="main" class="span9">
                <div id="search-results">
                    <asp:ContentPlaceHolder ID="MainContent" runat="server" />
                </div>
            </div>
            <% if (!isMobile)
               { %>    
            <div class="span2" id='right-column'>
           </div>
           <%  }
           %>

第二种策略是将母版页中的大部分正文分为两部分,一部分用于移动设备,另一部分用于桌面。 优点:避免下载额外的 .css 文件。 (因为移动代码可以在具有移动 id 的 div 中,并在 css 中使用特异性规则)。 缺点:更多的代码重复。 标签必须具有唯一的 ID,即使它们位于互斥的代码块中。
移动页面的 CSS 更复杂,因为所有标签都在一个移动标签下面。

使用此策略的母版页的类似摘录:

<% if (isMobile)
   {
    %>
            <div id="mobile-search-controls">
                <asp:ContentPlaceHolder ID="MobileSearchContent" runat="server" />
            </div>                   

            <%--body --%>
            <div id="bd" class="row-fluid">       
                <div id="main" class="span9">
                    <div id="search-results">
                         <asp:ContentPlaceHolder ID="MobileMainContent" runat="server" />
                    </div>
                </div>
            </div>
            <%--body end--%>        
    </div>
<%
   }
   else
   { %>
    <div id="bd" class="row-fluid">            
     <div id="left-column" class="span3">
                    <div id='controls-and-preferences'>
                        <asp:ContentPlaceHolder ID="LeftColumnContent" runat="server" />
                    </div>                                                                           
                </div><!--left-column --> 

                <div id="main" class="span9">
                    <div id="search-results">
                        <asp:ContentPlaceHolder ID="MainContent" runat="server" />
                    </div>
                </div>
                <div class="span2" id='right-column'>                   
               </div>
        </div>
   <%--body end--%>
<% }
    %>

我应该走哪条路?还有第三种更好的方法吗?

【问题讨论】:

  • @ShawnC。响应式在这里是不够的。因为移动网站在某些方面进行了简化和重组,同时保留了网站的一些元素(因此担心代码重复)而不做任何更改。
  • MVC 4 对移动设备有很多支持。看我的教程asp.net/mvc/tutorials/aspnet-mvc-4-mobile-features

标签: asp.net-mvc asp.net-mvc-3 mobile mobile-website


【解决方案1】:

用户277498,

我已经为 vs: 使用了 Mobile Ready HTML5 MVC.NET 模板:

http://visualstudiogallery.msdn.microsoft.com/9df9c61c-4d90-43e5-9aa1-a58786b7a1e4

效果很好。这基本上有一个视图引擎,允许将视图定向到 twds 移动和/或普通 mvc。它的工作方式实际上非常“神奇”。试一试,我已经在 3 个项目中使用过,没有任何问题。

【讨论】:

    【解决方案2】:

    您可能需要考虑使用 Twitter Bootstrap (http://twitter.github.com/bootstrap/) 等框架。

    他们有一些例子可以在任何分辨率的设备上运行良好:

    http://twitter.github.com/bootstrap/examples/fluid.html

    【讨论】:

    • 谢谢!我们正在使用媒体查询和引导程序。我们还需要修改一些页面。删除一些功能,并为移动网络简化一些其他功能。
    • 我认为解决这个问题的最简单方法是在您的媒体查询中,您可以在要隐藏在移动屏幕分辨率中的 DIV 上使用 CSS“display:none”
    【解决方案3】:

    你应该使用 css 3 媒体查询来处理这样的事情。看看这个链接,它有一个演示
    http://webdesignerwall.com/demo/adaptive-design/final.html

    【讨论】:

    • 谢谢!我们正在使用媒体查询和引导程序。我们还需要修改一些页面。删除一些功能,并为移动网络简化其他一些功能。
    猜你喜欢
    • 1970-01-01
    • 2013-12-02
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多