本主题说明如何使用模型绑定和Web窗体处理数据。与处理ObjectDataSource或SqlDataSource等数据源对象相比,模型绑定使数据交互更加直接。
在本教程中,无涯教程将使用Entity Framework for Data和GridView在网页上显示数据。在这里,正在创建一个包括以下步骤的示例。
选择模板作为Web表单,并将身份验证更改为单个用户帐户。
使用母版页模板创建新的Web表单。将使用此母版页显示模型数据。
将使用代码优先迁移来创建对象和相应的数据库表。这些表将存储有关学生及其课程的信息。
在Model文件夹中创建一个新的模型类。
//StudentModels.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Entity; using System.ComponentModel.DataAnnotations; namespace ModelBindingDemo.Models { public class SchoolContextDemo : DbContext { public DbSet<Student> Students { get; set; } public DbSet<Enrollment> Enrollments { get; set; } public DbSet<Course> Courses { get; set; } } public class Student { [Key, Display(Name = "Email ID")] [ScaffoldColumn(false)] public int StudentID { get; set; } [Required, StringLength(40), Display(Name = "Last Name")] public string LastName { get; set; } [Required, StringLength(20), Display(Name = "First Name")] public string FirstName { get; set; } [Required, StringLength(50), Display(Name = "Email ID")] public string Email { get; set; } [EnumDataType(typeof(AcademicYear)), Display(Name = "Academic Year")] public AcademicYear Year { get; set; } public virtual ICollection<Enrollment> Enrollments { get; set; } } public class Enrollment { [Key] public int EnrollmentID { get; set; } public int CourseID { get; set; } public int StudentID { get; set; } public decimal? Grade { get; set; } public virtualCourse Course { get; set; } public virtualStudent Student { get; set; } } public class Course { [Key] public int CourseID { get; set; } public string Title { get; set; } public int Credits { get; set; } public virtual ICollection<Enrollment> Enrollments { get; set; } } public enum AcademicYear { Freshman, Sophomore, Junior, Senior } }
SchoolContextDemo类派生自DbContext,后者管理数据库连接和数据更改。
将使用代码优先迁移工具来设置基于这些类的数据库。按照view->other windows-> Package Manager Console。
enable-migrations -Force -ContextTypeName ModelBindingDemo.Models.SchoolContextDemo
执行上述命令后,它将生成以下输出。
之后,将创建名为Configuration.cs的新文件。此文件在创建后会自动打开。
在这里,将向配置文件添加一些数据,以便在网页上显示给用户。将数据添加到文件后,Configuration.cs文件如下所示:
//Configuration.cs
namespace ModelBindingDemo.Migrations { using System; using System.Data.Entity; using System.Data.Entity.Migrations; using System.Linq; using ModelBindingDemo.Models; internal sealed class Configuration : DbMigrationsConfiguration<ModelBindingDemo.Models.SchoolContextDemo> { public Configuration() { AutomaticMigrationsEnabled = false; } protected override void Seed(ModelBindingDemo.Models.SchoolContextDemo context) { context.Students.AddOrUpdate( new Student { FirstName = "M. Irfan", LastName = "Khan", Email = "irfan@example.com", Year = AcademicYear.Freshman }, new Student { FirstName = "Arvind", LastName = "Kumar", Email = "Arvind@example.com", Year = AcademicYear.Freshman }, new Student { FirstName = "Arturo", LastName = "Anand", Email = "Anand@example.com", Year = AcademicYear.Sophomore }, new Student { FirstName = "Moris", LastName = "Mano", Email = "moris@example.com", Year = AcademicYear.Sophomore }, new Student { FirstName = "Roman", LastName = "Sigh", Email = "roman@example.com", Year = AcademicYear.Junior }, new Student { FirstName = "Jimmi", LastName = "Seth", Email = "jimmi@example.com", Year = AcademicYear.Junior }, new Student { FirstName = "Shayam", LastName = "Rana", Email = "Shayam@example.com", Year = AcademicYear.Senior }, new Student { FirstName = "Jecub", LastName = "Cunto", Email = "Nino@example.com", Year = AcademicYear.Senior } ); context.SaveChanges(); context.Courses.AddOrUpdate( new Course { Title = "Chemistry", Credits = 3 }, new Course { Title = "Microeconomics", Credits = 3 }, new Course { Title = "Macroeconomics", Credits = 3 }, new Course { Title = "Calculus", Credits = 4 }, new Course { Title = "Trigonometry", Credits = 4 }, new Course { Title = "Composition", Credits = 3 }, new Course { Title = "Literature", Credits = 4 } ); context.SaveChanges(); context.Enrollments.AddOrUpdate( new Enrollment { StudentID = 1, CourseID = 1, Grade = 1 }, new Enrollment { StudentID = 1, CourseID = 2, Grade = 3 }, new Enrollment { StudentID = 1, CourseID = 3, Grade = 1 }, new Enrollment { StudentID = 2, CourseID = 4, Grade = 2 }, new Enrollment { StudentID = 2, CourseID = 5, Grade = 4 }, new Enrollment { StudentID = 2, CourseID = 6, Grade = 4 }, new Enrollment { StudentID = 3, CourseID = 1 }, new Enrollment { StudentID = 4, CourseID = 1 }, new Enrollment { StudentID = 4, CourseID = 2, Grade = 4 }, new Enrollment { StudentID = 5, CourseID = 3, Grade = 3 }, new Enrollment { StudentID = 6, CourseID = 4 }, new Enrollment { StudentID = 7, CourseID = 5, Grade = 2 } ); context.SaveChanges(); } } }
之后,在package Manager控制台中,运行以下命令。
PM> add-migration initial
和
PM> update-database
现在,已经创建了一个数据库,并将其添加到App_Data文件夹下的项目中。
//Student.aspx
<%@PageTitle="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Students.aspx.cs" Inherits="ModelBindingDemo.Students" %> <asp:ContentID="Content1"ContentPlaceHolderID="MainContent"runat="server"> <asp:GridViewrunat="server"ID="studentsGrid" ItemType="ModelBindingDemo.Models.Student"DataKeyNames="StudentID" SelectMethod="studentsGrid_GetData" AutoGenerateColumns="false"> <Columns> <asp:DynamicFieldDataField="StudentID"/> <asp:DynamicFieldDataField="FirstName"/> <asp:DynamicFieldDataField="LastName"/> <asp:DynamicFieldDataField="Email"/> </Columns> </asp:GridView> </asp:Content>
//Student.aspx.cs
using System; using System.Collections.Generic; using System.Linq; using ModelBindingDemo.Models; using System.Data.Entity; namespace ModelBindingDemo { public partial class Students : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } public IQueryable<Student> studentsGrid_GetData() { SchoolContextDemo db = newSchoolContextDemo(); var query = db.Students.Include(s => s.Enrollments.Select(e => e.Course)); return query; } } }
最后,无涯教程的项目如下所示。
输出:
在浏览器中以视图形式运行Student.aspx文件,将产生以下输出。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)
PPT设计进阶 · 从基础操作到高级创意 -〔李金宝(Bobbie)〕