1、新建MVC项目
2、创建数据模型类,右键Models文件夹,选择 “添加” → “类” → Movie.cs类,编写类,创建数据库上下文类
public class Movie
{
public int ID { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
}
public class MovieDBContext : DbContext //创建数据库上下文类
{
public DbSet<Movie> Movies { get; set; }
}
3、创建数据库连接串,在Web.config文件中添加:
…
<connectionStrings>
<add name="MovieDBContext"
connectionString="Data Source=(LocalDb)\Mssqllocaldb;
AttachDbFilename=|DataDirectory|\Movies.mdf;
Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
//name取值要用数据库上下文类名
//使用LocalDb服务器(每个主机都不同,可以查看自己的服务器)
//数据库名称为Movies
…
4、新建空控制器,MoviesController,添加Action如下:
public class MoviesController : Controller
{
public ActionResult Index()
{
return View(db.Movies.ToList()); //这里传递的是数据集合给视图
//db.Movies.ToList() 返回类型为IEnumerable<MVCMovie.Models.Movie>
}
public ActionResult Create()
{
return View();
}
}
5、创建两个视图Index.cshtml和Create.cshtml(可以选择用模板创建)
6、添加一个提交Create的Action,添加一个同名为Create的Action,用 [HttpPost] 标识:
public class MoviesController : Controller
{ private MovieDBContext db = new MovieDBContext();
public ActionResult Create()
{
return View();
}
[HttpPost] //处理post请求
[ValidateAntiForgeryToken]
//防止跨站请求伪造攻击(CSRF:Cross-Site Request Forgery)
public ActionResult Create(Movie movie) //参数对象将自动接收视图传递过来的数据
{
db.Movies.Add(movie);
db.SaveChanges();
return RedirectToAction("Index");
}
}
7、添加三个Action, 分别是Edit,Delete和Details,再添加一个提交Edit的Action和一个提交Delete的Action(同上)
public ActionResult Edit(int? id) //此处将 int id 改为 int? id更安全一些
{
if (id == null) //id为空值时
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Movie movie = db.Movies.Find(id); //查找给定主键的实体
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}
[HttpPost] //处理post请求
[ValidateAntiForgeryToken] //防止跨站请求伪造攻击
public ActionResult Edit(Movie movie)
{
if (ModelState.IsValid)
{
db.Entry(movie).State = EntityState.Modified; //修改一下状态
db.SaveChanges();
return RedirectToAction("Index");
}
return View(movie); //如果没有通过服务器端验证则返回重新修改
}
public ActionResult Delete(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Delete(int id)
{
Movie movie = db.Movies.Find(id);
db.Movies.Remove(movie);
db.SaveChanges();
return RedirectToAction("Index");
}
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}
8、条件查询界面(上方的电影类型和电影名称查询)
9、 index界面需添加html元素
<p>
@Html.ActionLink("Create New", "Create")
@using ( Html.BeginForm( "Index", "Movies", FormMethod.Get ) ) //使用Get方法提交数据
{
<p>
电影类型:@Html.DropDownList("movieGenre", "all")
电影名称:@Html.TextBox("SearchString")
//生成的html:<input id="SearchString" name="SearchString" type="text" value="" />
<input type="submit" value="查询" />
</p>
}
</p>
//…
10、修改MovieController中index的代码
public ActionResult Index(string movieGenre,string searchString)
{
var GenreLst = new List<string>();
var GenreQry = from d in db.Movies orderby d.Genre select d.Genre;
GenreLst.AddRange(GenreQry.Distinct());
ViewBag.movieGenre = new SelectList(GenreLst);
var movies = from m in db.Movies select m;
if(!String.IsNullOrEmpty(movieGenre))
{ movies = movies.Where(x => x.Genre == movieGenre); }
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
return View(movies);
}
运行效果图:
代码比较简单哈,希望对大家有帮助!