ASP.NET - WF模型绑定

ASP.NET - WF模型绑定 首页 / ASP.Net MVC入门教程 / ASP.NET - WF模型绑定

本主题说明如何使用模型绑定和Web窗体处理数据。与处理ObjectDataSource或SqlDataSource等数据源对象相比,模型绑定使数据交互更加直接。

在本教程中,无涯教程将使用Entity Framework for Data和GridView在网页上显示数据。在这里,正在创建一个包括以下步骤的示例。

  1. 创建ASP.NET Web应用程序
  2. ASP Model building 1
  3. 选择模板
  4. 选择模板作为Web表单,并将身份验证更改为单个用户帐户。

    ASP Model building 2
  5. 创建主页
  6. 使用母版页模板创建新的Web表单。将使用此母版页显示模型数据。

    ASP Model building 3
  7. 创建数据模型和数据库
  8. 将使用代码优先迁移来创建对象和相应的数据库表。这些表将存储有关学生及其课程的信息。

    在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

它将在Visual Studio IDE的底部提示一个屏幕。需要在此控制台中执行以下命令。

enable-migrations -Force -ContextTypeName ModelBindingDemo.Models.SchoolContextDemo

执行上述命令后,它将生成以下输出。

ASP Model building 4

之后,将创建名为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
    ASP Model building 5

    现在,已经创建了一个数据库,并将其添加到App_Data文件夹下的项目中。

  • 现在,将创建的数据库中的数据显示到网页上。将使用GridView控件以网格形式显示数据。Student.aspx文件如下所示:
  • //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;
            }
        }
    }

    最后,无涯教程的项目如下所示。

    ASP Model building 6

    输出:

    在浏览器中以视图形式运行Student.aspx文件,将产生以下输出。

    ASP Model building 7

    祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

    技术教程推荐

    OpenResty从入门到实战 -〔温铭〕

    Spark核心原理与实战 -〔王磊〕

    容器实战高手课 -〔李程远〕

    高楼的性能工程实战课 -〔高楼〕

    零基础入门Spark -〔吴磊〕

    李智慧 · 高并发架构实战课 -〔李智慧〕

    手把手带你搭建推荐系统 -〔黄鸿波〕

    结构思考力 · 透过结构看问题解决 -〔李忠秋〕

    PPT设计进阶 · 从基础操作到高级创意 -〔李金宝(Bobbie)〕

    好记忆不如烂笔头。留下您的足迹吧 :)