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 至此,新增表成功了