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

本文主要讲的内容是 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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容

  • Z说我就是你的垃圾桶,你说什么,我大部分都没有太明白 如果没有说话,不把心理的垃圾倒出来,那就会睡不着 有时候,将...
    ilkaynhl阅读 438评论 0 0
  • 时间来到二零零九年暑假,二娃的儿子强强在板桥镇中心小学初中毕业了,以优异的成绩考入了自贡市蜀光中学。二娃心里既高兴...
    话唠的二娃阅读 165评论 0 0
  • 因为你们不知道,在你们心里那些无所谓的话,会对别人伤害有多大。—90后不知名码农 “我走过的桥,比你走过的路还多”...
    极客简讯阅读 472评论 0 1