(八)学习MVC之三级联动

1.新建项目,MVC选择基本模板

2.新建类:Model/Student.cs,数据库信息有三个实体:分别是年级、班级和学生。

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace CascadeExample.Models
{
    public class Grade
    {
        [Key]
        public int GradeId { get; set; }
        public string GradeName { get; set; }
        public List<Class> Classes { get; set; } 

    }
    public class Class
    {
        [Key]
        public int ClassId { get; set; }
        public string ClassName { get; set; }
        public int GradeId { get; set; }
        public Grade Grades { get; set; }
        public List<Student> Students { get;set; } 
    }
    public class Student
    {
        [Key]
        public int StudentId { get; set; }
        public string StudentName { get; set; }
        public int ClassId { get; set; }
        public Class Classes { get; set; }
    }
}

3.新建类:Model/StudentContext.cs

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;

namespace CascadeExample.Models
{
    public class StudentContext : DbContext
    {
        public DbSet<Student> Students { get; set; }        //代码中为每个实体都创建了一个DbSet的属性。
        public DbSet<Class> Classes { get; set; }
        public DbSet<Grade> Grades { get; set; }
        public StudentContext()
            : base("Connection")
        {
            Database.CreateIfNotExists();       //表示如果如果不存在此数据库,就去创建数据库。
        }
    }
}

4.修改Web.Config,数据存放在本地数据库上。

 <connectionStrings>
    <add name="Connection" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=Student;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\Student.mdf" />
  </connectionStrings>

 5.新建控制器:HomeControl

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CascadeExample.Models;

namespace CascadeExample.Controllers
{
    public class HomeController : Controller
    {
        public StudentContext StudentContexts=new StudentContext();

       #region 获取年级数据GetGrade()

        public JsonResult GetGrade()
        {
            IQueryable<Grade> grades= StudentContexts.Grades;
            List<Grade> gradeList = grades.ToList();
            List<SelectListItem>gradeListItems=new List<SelectListItem>();
            foreach (var i in gradeList)
            {
                gradeListItems.Add(new SelectListItem{Text = i.GradeName,Value = i.GradeId.ToString()});
            }
            return Json(gradeListItems, JsonRequestBehavior.AllowGet);
        }
       #endregion

       #region 获取班级数据GetClass()

        public JsonResult GetClass(int id)
        {
            int gradegradeId = id;
            IQueryable<Class> classes = StudentContexts.Classes.Where(o => o.GradeId == gradegradeId);
            List<Class> classlList = classes.ToList();
            List<SelectListItem> classListItems = new List<SelectListItem>();
            foreach (var i in classlList)
            {
                classListItems.Add(new SelectListItem {Text = i.ClassName,Value = i.ClassId.ToString()});
            }
            return Json(classListItems, JsonRequestBehavior.AllowGet);
        }
       #endregion

       #region 获取学生数据GetStudent()

        public JsonResult GetStudent(string id)
        {
            string[] ids = id.Split(",".ToCharArray());
            string gradeId = ids[0];
            string classId = ids[1];
            int classesId= Convert.ToInt32(classId);
            IQueryable<Student> students = StudentContexts.Students.Where(o => o.ClassId == classesId);
            List<Student> studentList = students.ToList();
            List<SelectListItem>studentListItems=new List<SelectListItem>();
            foreach (var i in studentList)
            {
                studentListItems.Add(new SelectListItem{Text = i.StudentName,Value = i.StudentId.ToString()});
            }
            return Json(studentListItems, JsonRequestBehavior.AllowGet);
        }

       #endregion

        #region Index()
        public ActionResult Index()
        {
            return View();
        }
        #endregion
    }
}

6.添加视图:View/Home/Index.cshtml

@model CascadeExample.Models.Grade

@{
    ViewBag.Title = "三级联动例子";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<fieldset>
    <legend>三级联动例子</legend>
    <table>
        <tr>
            <td>
                <select id="gradeSelect" name="grade" style="width:100px;">
                    <option>请选择年级</option>
                </select>
            </td>

            <td>
                <select id="classSelect" name="classes" style="width:100px;">
                    <option>请选择班级</option>
                </select>
            </td>

            <td>
                <select id="studentSelect" name="student" style="width:100px;">
                    <option>请选择学生</option>
                </select>
            </td>
        </tr>
    </table>
    <input type="submit" name="submit" id="submit" />
</fieldset>
@section scripts
{
    <script type="text/javascript" src="~/Scripts/jquery-ui.min-1.11.1.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            GetGrade();
            $("#gradeSelect").change(function () {
                GetClass();
                GetStudent();
            });
            $("#classSelect").change(function () {
                GetStudent();
            });
        }
        );

        function GetGrade() {
            $("#gradeSelect").empty();
            var option = $("<option></option>").val(-1).text("请选择年级");
            $("#gradeSelect").append(option);
            $.getJSON("/Home/GetGrade/", function (data) {

                $.each(data, function (i, item) {
                    $("<option></option>")
                        .val(item["Value"])
                        .text(item["Text"])
                        .appendTo("#gradeSelect");
                });
            });
        }


        function GetClass() {
            $("#classSelect").empty();
            var option = $("<option></option>").val(-1).text("请选择班级");
            $("#classSelect").append(option);
            var url = "/Home/GetClass/" + $("#gradeSelect").val() + "/";
            $.getJSON(url, function (data) {
                $.each(data, function (i, item) {
                    $("<option></option>")
                        .val(item["Value"])
                        .text(item["Text"])
                        .appendTo("#classSelect");
                });
            });

        }

        function GetStudent() {
            $("#studentSelect").empty();
            var option = $("<option></option>").val(-1).text("请选择学生");
            $("#studentSelect").append(option);
            var url = "/Home/GetStudent/" + $("#gradeSelect").val() + "," + $("#classSelect").val() + "/";
            $.getJSON(url, function (data) {
                $.each(data, function (i, item) {
                    $("<option></option>")
                        .val(item["Value"])
                        .text(item["Text"])
                        .appendTo("#studentSelect");
                });
            });
        }
        $("#submit").click(function () {

            var grade = document.getElementById("gradeSelect");
            var gradeIndex = grade.selectedIndex;          //索引的值
            var gradeText = grade.options[gradeIndex].text;         //绑定的DataValueField的值
            var gradeValue = grade.options[gradeIndex].value;       //绑定的DataTextField的值

            var classes = document.getElementById("classSelect");
            var classesIndex = classes.selectedIndex;
            var classText = classes.options[classesIndex].text;
            var classesValue = classes.options[classesIndex].value;

            var student = document.getElementById("studentSelect");
            var studentIndex = student.selectedIndex;
            var studentText = student.options[studentIndex].text;
            var studentValue = student.options[studentIndex].value;

            if (gradeValue != -1 && classesValue != -1 && studentValue != -1) {
                alert("你的选择是: " + gradeText + classText + studentText + "");
            }
            else {
                alert("请选择年级、班级和学生信息");
            }
        });
    </script>
}

7.运行程序。

8.去数据库添加数据:

年级表:

班级表:

学生表:

9.再次运行程序。

点击提交,出现:

10.完成。

posted @ 2014-09-02 17:36  wiming  阅读(476)  评论(0编辑  收藏  举报