在ASP.NET MVC中实现区域或城市选择

每次在"万达影城"网上购票总会用到左上角选择城市的功能。如下:

今天就在ASP.NET MVC中实现一下。我想最好的方式应该是写一个插件,但自己在这方面的功力尚欠缺,如果大家在这方面有好的解决方案,希望在这一起交流,那将会更好。

大致思路如下:
○ 点击"更换"弹出div,用bootstrap来实现
○ div中的tabs,用jqueryui来实现
○ tab项中的城市,用jquery.tmpl.min.js模版来实现

有关城市的Model:

    public class City
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string FirstLetter { get; set; }
    }

在Shared文件夹下的_Layout.cshtml中,引用jquery, jqueryui, bootstrap相关的css和js文件。

<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
    @Styles.Render("~/Content/css")
    <link href="~/Content/themes/base/jquery-ui.css" rel="stylesheet" />
    <link href="~/bootstrap/css/bootstrap.min.css" rel="stylesheet" />
    @RenderSection("styles", required: false)
    @Scripts.Render("~/bundles/jquery")
    <script src="~/Scripts/jquery-ui-1.8.24.min.js"></script>
    <script src="~/bootstrap/js/bootstrap.min.js"></script>
</head>
<body>
    @RenderBody()


    @RenderSection("scripts", required: false)
</body>


在Home/Index.cshtml视图中:

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

@section styles
{
    <link href="~/Content/CitySelect.css" rel="stylesheet" />
}

<nav class="navbar navbar-default navbar-static">
    <div class="navbar-header">
        <button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".js-navbar-collapse">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
        </button>
    </div>


    <div class="collapse navbar-collapse js-navbar-collapse">
        <ul class="nav navbar-nav">
            <li class="dropdown dropdown-large">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown"><span id="dp">全国</span><span>[更换]</span> <b class="caret"></b></a>

                <div class="dropdown-menu dropdown-menu-large row" id="cities">
                    <ul>
                        <li><a href="#tabs-1">ABCD</a></li>
                        <li><a href="#tabs-2">EFGH</a></li>
                        <li><a href="#tabs-3">IJKL</a></li>
                        <li><a href="#tabs-4">MNOP</a></li>
                        <li><a href="#tabs-5">QRST</a></li>
                        <li><a href="#tabs-6">UVWX</a></li>
                        <li><a href="#tabs-7">&nbsp;&nbsp;YZ</a></li>
                    </ul>
                    <div id="tabs-1">
                        <p></p>
                    </div>
                    <div id="tabs-2">
                        <p></p>
                    </div>
                    <div id="tabs-3">
                        <p></p>
                    </div>
                    <div id="tabs-4">
                        <p></p>
                    </div>
                    <div id="tabs-5">
                        <p></p>
                    </div>
                    <div id="tabs-6">
                        <p></p>
                    </div>
                    <div id="tabs-7">
                        <p></p>
                    </div>
                </div>


            </li>
        </ul>

    </div>
    <!-- /.nav-collapse -->
</nav>

@section scripts
{
    <script src="~/Scripts/jquery.tmpl.min.js"></script>
    <script type="text/javascript">
        $(function () {

            //tabs
            $(‘#cities‘).tabs({
                event: "mouseover"
            });

            //点击城市显示
            $(‘#cities‘).on("click", ".rc", function() {
                $(‘#dp‘).empty().text($(this).text());
            });

            //加载ABCD开头的城市
            $.getJSON(‘@Url.Action("GetCitiesByABCD","Home")‘, function(data) {
                if (data) {
                    $(‘#cityTemplate‘).tmpl(data).appendTo(‘#tabs-1 p‘);
                }
            });

            //加载EFGH开头的城市
            $.getJSON(‘@Url.Action("GetCitiesByEFGH","Home")‘, function (data) {
                if (data) {
                    $(‘#cityTemplate‘).tmpl(data).appendTo(‘#tabs-2 p‘);
                }
            });

            //加载IJKL开头的城市
            $.getJSON(‘@Url.Action("GetCitiesByIJKL","Home")‘, function (data) {
                if (data) {
                    $(‘#cityTemplate‘).tmpl(data).appendTo(‘#tabs-3 p‘);
                }
            });

            //加载MNOP开头的城市
            $.getJSON(‘@Url.Action("GetCitiesByMNOP","Home")‘, function (data) {
                if (data) {
                    $(‘#cityTemplate‘).tmpl(data).appendTo(‘#tabs-4 p‘);
                }
            });

            //加载QRST开头的城市
            $.getJSON(‘@Url.Action("GetCitiesByQRST","Home")‘, function (data) {
                if (data) {
                    $(‘#cityTemplate‘).tmpl(data).appendTo(‘#tabs-5 p‘);
                }
            });


            //加载UVWX开头的城市
            $.getJSON(‘@Url.Action("GetCitiesByUVWX","Home")‘, function (data) {
                if (data) {
                    $(‘#cityTemplate‘).tmpl(data).appendTo(‘#tabs-6 p‘);
                }
            });

            //加载YZ开头的城市
            $.getJSON(‘@Url.Action("GetCitiesByYZ","Home")‘, function (data) {
                if (data) {
                    $(‘#cityTemplate‘).tmpl(data).appendTo(‘#tabs-7 p‘);
                }
            });
        });
    </script>

    <script id="cityTemplate" type="text/x-jQuery-tmpl">
        <a class="rc" href="#">${city}</a>
    </script>
}


以上,

bootstrap显示导航菜单,点击"更换",弹出一个id为cities的div,其中包含jqueryui的tab。然后异步加载json数据到id为cityTemplate的模版上,最后追加到对应的区域。

在HomeController中:

using System.Linq;
using System.Web.Mvc;


namespace MvcApplication1.Controllers
{
    public class HomeController : Controller
    {
        //
        // GET: /Home/

        public ActionResult Index()
        {
            return View();
        }

        //获取首字母是ABCD的城市
        public ActionResult GetCitiesByABCD()
        {
            var cities =
                Database.GetCities()
                    .Where(
                        c =>
                            c.FirstLetter == "A" || c.FirstLetter == "B" || c.FirstLetter == "C" || c.FirstLetter == "D");
            var result = from c in cities
                select new {city = c.Name};
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        //获取首字母是EFGH的城市
        public ActionResult GetCitiesByEFGH()
        {
            var cities =
                Database.GetCities()
                    .Where(
                        c =>
                            c.FirstLetter == "E" || c.FirstLetter == "F" || c.FirstLetter == "G" || c.FirstLetter == "H");
            var result = from c in cities
                         select new { city = c.Name };
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        //获取首字母是IJKL的城市
        public ActionResult GetCitiesByIJKL()
        {
            var cities =
                Database.GetCities()
                    .Where(
                        c =>
                            c.FirstLetter == "I" || c.FirstLetter == "J" || c.FirstLetter == "K" || c.FirstLetter == "L");
            var result = from c in cities
                         select new { city = c.Name };
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        //获取首字母是MNOP的城市
        public ActionResult GetCitiesByMNOP()
        {
            var cities =
                Database.GetCities()
                    .Where(
                        c =>
                            c.FirstLetter == "M" || c.FirstLetter == "N" || c.FirstLetter == "O" || c.FirstLetter == "P");
            var result = from c in cities
                         select new { city = c.Name };
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        //获取首字母是QRST的城市
        public ActionResult GetCitiesByQRST()
        {
            var cities =
                Database.GetCities()
                    .Where(
                        c =>
                            c.FirstLetter == "Q" || c.FirstLetter == "R" || c.FirstLetter == "S" || c.FirstLetter == "T");
            var result = from c in cities
                         select new { city = c.Name };
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        //获取首字母是UVWX的城市
        public ActionResult GetCitiesByUVWX()
        {
            var cities =
                Database.GetCities()
                    .Where(
                        c =>
                            c.FirstLetter == "U" || c.FirstLetter == "V" || c.FirstLetter == "W" || c.FirstLetter == "X");
            var result = from c in cities
                         select new { city = c.Name };
            return Json(result, JsonRequestBehavior.AllowGet);
        }

        //获取首字母是YZ的城市
        public ActionResult GetCitiesByYZ()
        {
            var cities =
                Database.GetCities()
                    .Where(
                        c =>
                            c.FirstLetter == "Y" || c.FirstLetter == "Z");
            var result = from c in cities
                         select new { city = c.Name };
            return Json(result, JsonRequestBehavior.AllowGet);
        }
    }
}


最后呈现的效果:

有关CitySelect.css文件:

展开.dropdown-large {
  position: static !important;
}
.dropdown-menu-large {
  margin-left: 16px;
  margin-right: 16px;
  padding: 20px 0px;
}
.dropdown-menu-large > li > ul {
  padding: 0;
  margin: 0;
}
.dropdown-menu-large > li > ul > li {
  list-style: none;
}
.dropdown-menu-large > li > ul > li > a {
  display: block;
  padding: 3px 20px;
  clear: both;
  font-weight: normal;
  line-height: 1.428571429;
  color: #333333;
  white-space: normal;
}
.dropdown-menu-large > li ul > li > a:hover,
.dropdown-menu-large > li ul > li > a:focus {
  text-decoration: none;
  color: #262626;
  background-color: #f5f5f5;
}
.dropdown-menu-large .disabled > a,
.dropdown-menu-large .disabled > a:hover,
.dropdown-menu-large .disabled > a:focus {
  color: #999999;
}
.dropdown-menu-large .disabled > a:hover,
.dropdown-menu-large .disabled > a:focus {
  text-decoration: none;
  background-color: transparent;
  background-image: none;
  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
  cursor: not-allowed;
}
.dropdown-menu-large .dropdown-header {
  color: #428bca;
  font-size: 18px;
}
@media (max-width: 768px) {
  .dropdown-menu-large {
    margin-left: 0 ;
    margin-right: 0 ;
  }
  .dropdown-menu-large > li {
    margin-bottom: 30px;
  }
  .dropdown-menu-large > li:last-child {
    margin-bottom: 0;
  }
  .dropdown-menu-large .dropdown-header {
    padding: 3px 15px !important;
  }
}

#cities {
    width: 620px;
    padding: 10px;
}

#cities ul {
    width: 600px;
}

#cities div {
    width: 600px;
}

#cities li{
    text-align: center;
    width: 80px;
    height: 30px;
    padding: 5px;
}

.rc {
    margin-right: 20px;
}

有关Database类:

展开using System.Collections.Generic;
using MvcApplication1.Models;

namespace MvcApplication1
{
    public class Database
    {
        public static IEnumerable<City> GetCities()
        {
            return new List<City>()
            {
                new City(){Id = 1, Name = "包头", FirstLetter = "B"},
                new City(){Id = 2, Name = "北京", FirstLetter = "B"},
                new City(){Id = 3, Name = "长春", FirstLetter = "C"},
                new City(){Id = 4, Name = "大同", FirstLetter = "D"},
                new City(){Id = 5, Name = "福州", FirstLetter = "F"},
                new City(){Id = 6, Name = "广州", FirstLetter = "G"},
                new City(){Id = 7, Name = "哈尔滨", FirstLetter = "H"},
                new City(){Id = 8, Name = "济南", FirstLetter = "J"},
                new City(){Id = 9, Name = "昆明", FirstLetter = "K"},
                new City(){Id = 10, Name = "洛阳", FirstLetter = "L"},
                new City(){Id = 11, Name = "马鞍山", FirstLetter = "M"},
                new City(){Id = 12, Name = "南京", FirstLetter = "N"},
                new City(){Id = 13, Name = "青岛", FirstLetter = "Q"},
                new City(){Id = 14, Name = "深圳", FirstLetter = "S"},
                new City(){Id = 15, Name = "天津", FirstLetter = "T"},
                new City(){Id = 16, Name = "威海", FirstLetter = "W"},
                new City(){Id = 17, Name = "西安", FirstLetter = "X"},
                new City(){Id = 18, Name = "烟台", FirstLetter = "Y"},
                new City(){Id = 19, Name = "郑江", FirstLetter = "Z"}
            };
        }

    }
}
时间: 2024-09-29 23:05:15

在ASP.NET MVC中实现区域或城市选择的相关文章

在ASP.NET MVC中使用区域来方便管理controller和view

在ASP.NET MVC中使用区域来方便管理controller和view 在mvc架构中,一般在controllers和views中写所有控制器和视图, 太多控制器时候,为了方便管理,想要将关于person的所有控制器放在一个文件夹里面,这样就容易查看和管理. 这时候在WEB下面创建一个Areas文件夹.(和Controllsers文件夹同级) 然后在Areas里面右键选择新建区域. 会自动创建一个路由信息,和web.comfig还有controllers文件夹等. 这时候就可以很清晰的管理和

关于 ASP.NET MVC 中的视图生成

在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据. 从控制器到视图 通常,在 Controller 中,我们定义多个 Action ,每个 Action 的返回类型一般是 ActionResult,在 Action 处理的最后,我们返回对于视图的调用. public ActionResult Index() { return this.View(); } 默认情况下,

ASP.NET MVC中商品模块小样

在前面的几篇文章中,已经在控制台和界面实现了属性值的笛卡尔乘积,这是商品模块中的一个难点.本篇就来实现在ASP.NET MVC4下商品模块的一个小样.与本篇相关的文章包括: 1.ASP.NET MVC中实现属性和属性值的组合,即笛卡尔乘积01, 在控制台实现  2.ASP.NET MVC中实现属性和属性值的组合,即笛卡尔乘积02, 在界面实现   3.再议ASP.NET MVC中CheckBoxList的验证   4.ASP.NET MVC在服务端把异步上传的图片裁剪成不同尺寸分别保存,并设置上

ASP.NET MVC中实现属性和属性值的组合,即笛卡尔乘积02, 在界面实现

在"ASP.NET MVC中实现属性和属性值的组合,即笛卡尔乘积01, 在控制台实现"中,在控制台应用程序中实现了属性值的笛卡尔乘积.本篇在界面中实现.需要实现的大致如下: 在界面中勾选CheckBoxList中属性值选项: 把勾选的属性值进行笛卡尔乘积,每行需要填写价格: 我们暂且不考虑这些CheckBoxList是如何显示出来的(在后续有关商品模块的文章中会实现),还需考虑的方面包括: 1.从CheckBoxList中获取到什么再往控制器传? 对于每行的CheckBoxList来说

log4net 使用总结- (2)在ASP.NET MVC 中使用

log4net在ASP.NET MVC中的配置,还有一种配置方式,即不在web.config中,而是单独新建一个log4net.config 在根目录下 第一.引用log4net.dll 第二.在站点根目录下增加log4net.config <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="

ASP.NET MVC中使用异步控制器

线程池 一直想把项目改写成异步,但是ASP.NETMVC3下写的过于繁琐,.NET 4.5与ASP.NET MVC下代码写起来就比较简单了, MS好像也一直喜欢这样搞,每一个成熟的东西,都要演变好几个版本,才能趋于规范. ASP.NET MVC 中为什么需要使用异步呢,IIS有一个线程池来处理用户的请求,当一个新的请求过来时,将调度池中的线程以处理该请求,然而,但并发量很高的情况下,池中的线程已经不能够满足这么多的请求时候,池中的每一个线程都处于忙的状态则在处理请求时将阻塞处理请求的线程,并且该

ASP.NET MVC中使用ASP.NET AJAX异步访问WebService

使用过ASP.NET AJAX的朋友都知道,怎么通过ASP.NET AJAX在客户端访问WebService,其实在ASP.NET MVC中使用ASP.NET AJAX异步访问WebService 也没什么大的差别. 在ASP.NET应用程序里使用ASP.NET AJAX访问WebService通常都是通过ScriptMananger引入WebService生成客户端代理的方法,同时也可以使用Microsoft Ajax Library来完成.本文将介绍在ASP.NET MVC中使用ASP.NE

ASP.NET MVC中使用FluentValidation验证实体

1.FluentValidation介绍 FluentValidation是与ASP.NET DataAnnotataion Attribute验证实体不同的数据验证组件,提供了将实体与验证分离开来的验证方式,同时FluentValidation还提供了表达式链式语法. 2.安装FluentValidation FluentValidation地址:http://fluentvalidation.codeplex.com/ 使用Visual Studio的管理NuGet程序包安装FluentVa

ASP.NET MVC 中应用Windows服务以及Webservice服务开发分布式定时器

ASP.NET MVC 中应用Windows服务以及Webservice服务开发分布式定时器一:闲谈一下:1.现在任务跟踪管理系统已经开发快要结束了,抽一点时间来写一下,想一想自己就有成就感啊!!  2.关于任务跟踪管理系统项目中遇到的Windows服务以及Webservice的综合应用的问题. 大家好这是我第二次写博客 ,写的不好请大家多多谅解, 希望大家可以多多指正. 二:我稍微的整理了一下关于这个分布式定时器需求:1.根据任务跟踪管理系统中的数据库的AnswerSheet 表格中找到客户编