65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 jQuery Mobile 在 ASP.NET MVC 4 中开发移动设备专用视图 - 第二部分

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.87/5 (21投票s)

2014年3月6日

CPOL

5分钟阅读

viewsIcon

59042

downloadIcon

3258

使用 jQuery Mobile 在 ASP.NET MVC 4 中开发移动设备专用视图 - 第二部分

引言

本文是系列文章“在 ASP.NET MVC 4 中使用 jQuery Mobile 开发移动设备专用视图”的第二部分,也是最后一部分,上一部分是 第一部分。本系列文章主要介绍如何在 ASP.NET MVC 4 中开发一个同时拥有移动设备专用视图和桌面视图的 Web 应用程序。针对移动设备的用户界面设计与针对桌面屏幕的设计有很大不同。我们使用 jQuery Mobile 在演示应用程序中开发移动设备专用视图。

目录

本系列文章共两部分。第一部分,点击此处。第二部分,我们将包含以下主题

  • 安装 jQuery Mobile
  • 为移动设备视图创建捆绑包
  • 为移动设备视图设计布局
  • 为移动设备设计产品页面
  • 为移动设备设计按类别划分的产品页面
  • 参考文献

本文的第一部分中,我们以 ASP.NET MVC 4 的互联网模板开始,在 Visual Studio 2012 中创建了一个可用的应用程序。该应用程序显示产品信息,并且每个页面都有两种视图:桌面视图和移动设备视图。但是,我们还没有做任何事情来使移动设备视图与桌面视图有所区别。到目前为止,除了添加文本“Mobile View”之外,它们看起来和感觉都一样。

在本文中,我们将使用 jQuery Mobile 来修改移动设备视图,以在移动设备上获得更好的外观和感觉。对于本文,我们在第一部分中完成的应用程序是基础,因此请下载该解决方案的第一部分,然后按照下一节的说明安装 jQuery Mobile 进行继续。

安装 jQuery Mobile

为了开发移动设备专用视图,我们将使用 jQuery Mobile。它是一个用于开发响应式网站或 Web 应用程序的框架,适用于所有类型的智能手机、平板电脑和桌面设备。

  1. 点击“工具”选项卡,然后转到“库程序包管理器” > “管理解决方案的 NuGet 程序包”选项。

    NuGet Package Manager UI

  2. 搜索 jQuery mobile,就像我们在本文第一部分搜索 51Degrees.mobi 一样,然后点击“安装”,如下图所示的按钮。

    Searching for JQuery Mobile

  3. 点击“安装”按钮后,您需要确认弹出窗口,选择要安装的应用程序,然后点击“确定”,就像我们为 51Degrees.mobi 所做的那样。它将在您的项目中安装 jQuery Mobile,您将能够看到一些新的 CSS 文件添加到 Content 文件夹,以及一些新的脚本文件添加到Scripts文件夹,如下面的屏幕截图所示。

    Content Folder

    脚本文件夹

    Script Folder

    现在 jQuery Mobile 已安装到我们的解决方案中。

    安装 jQuery Mobile 的另一种方法是使用 Nuget 包管理器控制台,如第一部分关于 51Degrees.mobi 的描述,但这次您需要使用以下命令

    Install-Package jQuery.Mobile                 

    您将看到如下屏幕截图

    Using NuGet Console

为移动设备视图创建捆绑包

转到App_Start文件夹并打开BundleConfig.cs,在RegisterBundles 方法中,添加以下代码

bundles.Add(new ScriptBundle("~/bundles/Mobilejs").Include(
    "~/Scripts/jquery.mobile-1.*",
    "~/Scripts/jquery-1.*"));

bundles.Add(new StyleBundle("~/Content/Mobilecss").Include(
    "~/Content/jquery.mobile.structure-1.4.0.min.css",
    "~/Content/jquery.mobile-1.4.0.css"));        

在这里,我们创建了两个捆绑包:一个包含 JavaScript 文件,第二个包含所有将在移动设备专用视图中使用的 CSS 文件。我们将在移动设备专用布局页面中引用这些捆绑包。

为移动设备视图设计布局

  1. 打开 Views > Shared 文件夹。复制现有的 _Layout.cshtml并粘贴到 Shared 文件夹中。现在将“Copy of _Layout.cshtml”重命名为“_Layout.Mobile.cshtml”。在head 标签中写入以下代码
    <meta charset="utf-8" />
        <title>@ViewBag.Title – Mobile Application</title>
        <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
        <meta name="viewport" content="width=device-width" />
        @Styles.Render("~/Content/Mobilecss")
        @Scripts.Render("~/bundles/Mobilejs")
        @Scripts.Render("~/bundles/modernizr")

    在这里,我们引用了上面部分中创建的新捆绑包。

  2. body 标签内,删除所有现有代码并写入以下代码
      <div data-role="page" data-theme="a">
        <div data-role="header" data-position="fixed" data-theme="b">
            <h1>@ViewBag.Title</h1>
            <div data-role="navbar" data-theme="a" data-iconpos="top">
                <ul>
                    <li><a href="@Url.Action("Index", "Home")" data-icon="home">Home</a></li>
                    <li><a href="@Url.Action("AllProducts", "Product")" data-icon="check">Product</a></li>                    
                </ul>
            </div>
        </div>
        <div>
            @RenderSection("featured", false)
            @RenderBody()
        </div>
    </div>

    上面的代码有很多令人惊叹的地方。重点关注属性,如:data-role、data-position、data-theme 等及其值。它们是 jQuery mobile 定义的属性,用于为特定的 `div` 提供形状和行为。名称和用途密切相关,使其易于理解。您可以从 jQuery Mobile 演示此处了解更多关于这些属性的信息。

    仅凭这些代码,移动设备视图的页眉就会变得对移动设备友好。您可以运行应用程序并检查移动设备视图的页眉外观。

为移动设备设计产品页面

删除AllProducts.Mobile.cshtml中现有的代码并写入以下代码

@model IEnumerable<ShopOnline.Models.Product>
@{
    ViewBag.Title = "All Products";
}

<div class="ui-grid-a">
    <div class="ui-block-a">
        <hgroup class="title">
            <h1>@ViewBag.Title</h1>
        </hgroup>
    </div>
    <div class="ui-block-b">
        <a class="ui-btn ui-btn" style="color:blue" data-role="button" 
        href="@Url.Action("CategoryWiseProducts", "Product")">Category wise Products</a>
    </div>
</div>

@* Making collapsible set of all products using data-role*@
<div data-role="collapsible-set" data-inset="true">
    @foreach (var item in Model)
    {   
        <div data-role="collapsible">
            <h3>@item.ProductName</h3>
            <ul data-role="listview" data-theme="a" data-divider-theme="a" >
                <li style="white-space:normal">
                    <h4>Detail:</h4>
                    <div>@item.ProductDescription</div>
                </li>
            </ul>
        </div>
    }
</div>                 

在这里,我们首先创建一个包含页面标题和导航到“CategoryWiseProducts.Mobile.cshtml”页面的按钮的网格。之后,我们创建了一个可折叠的产品详细信息集。其中<li style="white-space:normal">是非常关键的代码,用于使文本可换行,否则详细文本将不会根据浏览器屏幕的宽度换行。如果您想探索更多关于任何属性的信息,或者了解其他设计可能性(如果您想以其他方式设计),请访问 jQuery Mobile - 演示并查看那里提供的控件。

为移动设备设计按类别划分的产品页面

删除CategoryWiseProducts.Mobile.cshtml中现有的代码并写入以下代码

@model ShopOnline.ViewModels.ProductCategoryVM
@{
    ViewBag.Title = "Category wise Products";
    SelectList cat = new SelectList(Model.AllCategories, "CategoryId", "CategoryName");  
}

<h2>Category wise Products</h2>
<div class="ui-field-contain">
    <select name="select-custom-1" id="categorySelect" data-native-menu="false">
        <option value="0">Select a Category</option>
        @foreach (var item in Model.AllCategories)
        {
            <option value="@item.CategoryId">@item.CategoryName</option>
        }
    </select>
</div>
<div id="tblProductData"></div>

<script>        
    $("#categorySelect").change(function () {
        var selectedCategory = $(this).val().trim(); 
        var allProducts = @Html.Raw(Json.Encode(Model.AllProducts));
            $('#tblProductData').empty();
            
            var frontheaders = '<div data-role="collapsible-set" data-inset="true">';           
            var backheaders = '</div>';           
            
            var elements = '';
            for (var i = 0; i < allProducts.length; i++) {
                if(allProducts[i].ProductCategory.CategoryId == selectedCategory)
                    elements = elements + '<div data-role="collapsible"> <h3>' + 
                    allProducts[i].ProductName + '</h3> <ul data-role="listview" 
                    data-theme="a" data-divider-theme="a"> <li style="white-space:normal"> 
                    <h4>Detail:</h4> <div>' + 
                    allProducts[i].ProductDescription + '</div> </li> </ul> </div>';                
            }
            
            if (elements != '')
            {   var data = frontheaders + elements + backheaders
                $('#tblProductData').append(data).trigger('create');            
            }
        });   
</script>                 

在这里,我们首先创建一个包含所有类别的下拉框。在选择一个类别后,我们使用 JavaScript 将产品数据添加到所选类别下的tblProductData div中。

现在我们已经完成了代码修改。运行应用程序,使用用户代理切换器检查移动设备视图。您应该能够看到如下所示的视图

移动设备专用“所有产品”页面

All Products Mobile View

移动设备专用“按类别划分的产品”页面

CategoryWiseProducts Mobile View

结论

在本系列文章中,我们学习了为什么需要为移动设备创建单独的视图,以及如何在 ASP.NET MVC 4 中结合使用 51Degrees.mobi 和 jQuery Mobile。希望您喜欢这个代码演练以及这段通往移动 Web 应用程序开发新世界的小旅程。欢迎您就此提出疑问和评论。谢谢。

参考文献

  1. jQuery Mobile 演示
  2. 使用 ASP.NET 开发移动应用程序和网站
© . All rights reserved.