美文网首页
2018-04-05 开胃学习.Net 系列 - MVC 起步

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

作者: Kaiweio | 来源:发表于2018-04-06 06:47 被阅读0次

    本文主要讲的内容是 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>
    

    相关文章

      网友评论

          本文标题:2018-04-05 开胃学习.Net 系列 - MVC 起步

          本文链接:https://www.haomeiwen.com/subject/lrjjhftx.html