Asp.net MVC 学习笔记

    xiaoxiao2026-10-08  1

    FrameWork4.5及以上才能创建MVC5的项目。

    MVC的开发模式相比较之前,改动太大,需要慢慢适应,抛弃了服务器端控件,抛弃了后台代码(.cs文件),一切交由控制器操作,处理保存数据时需要弄到按钮,其他都可以通过HtmlHelper生成链接。

    一、Controller 控制器

    1) 创建时,后边的Controller不能删除,创建后,IDE会自动在Views下边创建一个同名的文件夹。

    2) 没有html的Controllder可以通过网址访问,可以作为后台的处理方法使用。

    3) public string Welcome(string name, int numTimes = 1)

    第二个参数:如果没有赋值,默认值为1 

    4) url: "{controller}/{action}/{id}", 

      普通的模式下,访问控制器,触发事件,路由中还默认增加了id的参数,且不区分大小写的。

    也可以自己增加或修改路由,但是顺序要对应上。

    5) 编辑数据

    [HttpPost]//仅支持post方式访问

    [ValidateAntiForgeryToken]//阻止伪造请求,与View中的@Html.AntiForgeryToken()匹配。

    public ActionResult Edit([Bind(Include="ID,Title,ReleaseDate,Genre,Price")]Movie movie)

    写法好特别,最终绑定的是实体类

     

    6) 删除数据

    方法一、

     [HttpPost, ActionName("Delete")]

     public ActionResult DeleteConfirmed(int id){ ... }

    用ActionName重新定义事件名称

    方法二、

     public ActionResult Delete(FormCollection fcNotUsed,int id = 0)

    定义一个从不使用的form,一者保证是从form提交来的,二者保证同名函数的重载。

     

    7) 验证通过

    if (ModelState.IsValid)

    8) 通过名称重定向操作

    return RedirectToAction("Index");

    9) 查询语句

    var movies = from m in db.Movies

                     select m;

    movies = movies.Where(s => s.Title.Contains(searchString));

    上面s => s.Title 代码是一个Lambda 表达式。Lambda 是基于方法的LINQ查询。

    二、View 页面视图

    1) 设置链接 

    @Html.ActionLink("Edit","Edit",new { id=item.ID })

    //显示的链接文字,方法名称,匿名对象,发送给路由的参数,用来生成路由数据

    2) 设置Label

     @Html.LabelFor(model => model.Title,new { @class ="control-label col-md-2" })

    //设置label的for属性,设置class

    3) 设置Text

     @Html.EditorFor(model => model.Title),生成如下的DOM:

     <input class="text-box single-line" id="Title" name="Title" type="text"  />

          如果设置了必填以及各式,则生成如下的DOM:

     <input class="text-box single-line" data-val="true" data-val-date="字段 上线日期 必须是日期。" data-val-required="上线日期 字段是必需的。" id="ReleaseDate" name="ReleaseDate" type="date" value="2016-05-05" />

    4) 显示信息

      @Html.DisplayNameFor(model => model.Title)//模型的显示名称

      @Html.DisplayFor(model => model.Title)//每个对象的属性

     

    三、Model 类视图

    1) 字段验证

    [Display(Name = "上线日期")]//显示的名称

    [DataType(DataType.Date)]//数据类型

    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]

    //数据的格式,ApplyFormatInEditMode:编辑时是否使用格式化的样式

    如果客户端禁用JS,服务器端会再次进行验证的。

    2) 验证规则

    [StringLength(60, MinimumLength = 3)]......最大长度,最小长度

    [StringLength(4)]......最大字符长度

    [RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")]......正则验证

    [Required]......非空验证

    [Range(1, 100)]......数值型范围

    [DataType(DataType.Currency)]......数值型

    [Display(Name = "Release Date"), DataType(DataType.Date)]......也可以写在一行

    decimal, int, float, DateTime不需要设置非空验证

    四、程序包管理器控制台

    Enable-Migrations -ContextTypeName MvcMovie.Models.MovieDBContext

    会创建Migrations文件夹以及Configuration.cs文件

     

    修改Seed方法

    修改或插入数据。

     

    add-migration Initial

    创建DbMigration类,用于初始化数据迁移。

     

    update-database

    创建数据库并运行Seed方法。期间不可运行程序

     

     

    五、添加新字段

    1) 控制器中需要增加新字段

    2) 页面中添加新字段对应的控件或列

    3) 使用Code First Migrations[]来更新数据库的schema

    4) 根据需要查看第四条

    5) Configuration.cs中修改Seed方法,给新列赋值

    6) add-migration Rating,在数据库模型中增加新字段,[Rating]为新增的字段名

    7) update-database 更新数据库

     

    六、修改字段类型或长度

    1) 在model上加验证

    2) 运行add-migration DataAnnotations

    3) 运行update-database

     

    七、添加新表

    1) Model中创建新表的类,以下几句是重点:

    public class SQLDBContext :DbContext

        {

            public DbSet<sys_User> SysUsers {get; set; }

            public DbSet<mBranch> Branchs {get; set; }

     

        }

    2) Enable-Migrations -ContextTypeName MVCWeb.Areas.system.Models.SQLDBContext

    创建Configuration.cs文件

    3) add-migration Initial,对于已经存在的建表语句,需要删除

    4) update-database  至此,新增表成功了

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    转载请注明原文地址: https://ju.6miu.com/read-1312764.html
    最新回复(0)