2018-04-05 开胃学习.Net 系列 - MVC 起步

2018-04-06  本文已影响0人  Kaiweio

本文主要讲的内容是 Code First基础上的MVC 的起步基础操作。





关于MVC的中心:

  1. 建立一个Model Class
  2. 建立一个Scaffolding Item,生成一个MVC 5 View
  3. View 的模板有Create,Delete,Edit 等等

这次我们的工作是尝试起步使用一个MVC 例子,使用code first:




































稍微熟悉一下 MVC的结构后,我们在Model里面新建一个item

  1. 命名为contact.cs
  2. 输入[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 报错,自动可以修改,会加入using System.ComponentModel.DataAnnotations.Schema;
  3. [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 这个其实是设置自动增长属性

利用数据生成项 DatabaseGenerated,它后有三个枚举值: Identity:自增长;None:不处理;Computed:表示这一列是计算列
注意:在EF中,如果主键是int类型,Code First生成数据库的时候会自动设置该列为自增长。但如果主键是Guid类型,需要手动去设置
DATA Annotations 方式:[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]

  1. 写入 [Required] 这里也会报错,也是右击自动修改,在最前面生成了using System.ComponentModel.DataAnnotations;
  2. [Required] OR [Required(ErrorMessage = "xxx")] 只是一个 Data Annotations 方式,表示非空
  3. 写入[DisplayName] 报错右击自动加入 using System.ComponentModel;
  4. 是可以创建自己写的annotation
    public class MustBeTrueAttribute : ValidationAttribute
    // MustBeTrueAttribute 是自己创建的,而ValidationAttribute 是.Net 本来就有的Attribute class
    {
        public override bool IsValid(object value)
        {
            return value is bool && (bool)value;
        }
    }







总结
System.ComponentModel.DataAnnotations Attributes

Attribute Description
[DisplayName] 显示名字
[Required] 标注这个属性的字段,不能为空,确保其有数据
[MaxLength] 给字段设定最大长度

System.ComponentModel.DataAnnotations.Schema Attributes:

Attribute Description
[DatabaseGenerated] 标注了这个特性的属性,将会映射成数据表的计算列字段,所以这个属性将会是只读的。它同样可以用来映射成自动增长列





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

namespace Homework4.Models
{
    public class Contact
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }

        [Required]
        [DisplayName("First Name")]
        [MaxLength(20, ErrorMessage = "First name must be 20 characters or less.")]
        public string FristName { get; set; }

        [Required]
        [DisplayName("Last Name")]
        [MaxLength(20, ErrorMessage = "Last name must be 20 characters or less.")]
        public string LastName { get; set; }

        [Required]
        [DisplayName("Email")]
        [DataType(DataType.EmailAddress,ErrorMessage ="Email is not valid.")]
        // 这个注释是允许 yyy@xx.cc这样的,所以我们选择自制
        [Email]
        // 只需要写Email
        [MaxLength(20, ErrorMessage = "Email must be 20 characters or less.")]
        public string Email { get; set; }

        [DisplayName("Accept Terms and Conditions")]
        [MustBeTrue]
        public string AcceptTerms { get; set; }
    }


    public class MustBeTrueAttribute : ValidationAttribute
    // MustBeTrueAttribute 是自己创建的,而ValidationAttribute 是.Net 本来就有的Attribute class
    {
        public override bool IsValid(object value)
        {
            return value is bool && (bool)value;
        }
    }

    public class EmailAttribute : RegularExpressionAttribute
    {
        public EmailAttribute()
        
            : base(@"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}")
        { }
    }


}

该段内容相关链接:
Entity Framwork CodeFirst 学习笔记二:约定和配置
7.DataAnnotations(数据注解)【Code-First 系列】



































接下来我们尝试一下做个scaffolding,也就是俗称的脚手架(下面有图)

  1. scaffolding 可以利用model来生成很多不同的内容,我们这里尝试生成一个View
  2. 首先把Home 里面的Contact.cshtml 删除掉
  1. 在做后面步骤之前,首先要先rebuild resolution
  1. 然后在model里add一个新的 scaffolded item
  1. 选择 MVC 5 View
  1. Create 就是生成新的内容
  2. Model Class 就选择Contact
  3. ApplicationDbContext
  4. 最后还要选择layout page
  5. 之后会生成一个 contact.cshtml (满是红波浪)
  6. 之前可能搞错了,把这个contact.cshtml 放回到View 文件夹里的home文件夹里
  7. 然后 直接build solution
  1. 单纯是这样的内容,还无法提交,原因是什么?
  2. 回到controllers文件夹中的HomeController.cs
        // 这里只有GET ACTION,没有SUBMIT ACTION
        [HttpPost]
        public ActionResult Contact(Contact c)
        {
            // 检查modelstate valid,如果不是true,就把用户重返到当下的页面,如果是true,就返回thankyouview
            if (!ModelState.IsValid)
            {
                return View(c);
            }
            return View("ThankYouView", c);
        }
  1. 在view文件夹里的home文件夹中在add 新的thank you view
@{
    ViewBag.Title = "View";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Thanks for contacting us!</h2>
上一篇下一篇

猜你喜欢

热点阅读