这里我们建立一个简单的ASP.NET MVC实践应用,对News数据库的News表进行CRUD。
一、准备工作:
在SQLServer中创建News数据库News表,然后建立在Models文件夹中加入NewsData.dbml文件,将News表拖入到dbml文件中
二、创建News
1、添加视图
在Views文件夹中加入News文件夹,然后在News文件夹上单击右键-》添加-》View,然后按如下选择(注意需要再添加前先编译,不然无法显示Model中的类)
生成的代码如下:(略作修改,将id行去掉)
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcCRUDDemo.Models.News>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Create
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Create</h2>
<%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %>
<% using (Html.BeginForm()) {%>
<fieldset>
<legend>Fields</legend>
<p>
<label for="Title">Title:</label>
<%= Html.TextBox("Title") %>
<%= Html.ValidationMessage("Title", "*") %>
</p>
<p>
<label for="Content">Content:</label>
<%= Html.TextBox("Content") %>
<%= Html.ValidationMessage("Content", "*") %>
</p>
<p>
<label for="Author">Author:</label>
<%= Html.TextBox("Author") %>
<%= Html.ValidationMessage("Author", "*") %>
</p>
<p>
<label for="CreateTime">CreateTime:</label>
<%= Html.TextBox("CreateTime") %>
<%= Html.ValidationMessage("CreateTime", "*") %>
</p>
<p>
<label for="Country">Country:</label>
<%= Html.TextBox("Country") %>
<%= Html.ValidationMessage("Country", "*") %>
</p>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% } %>
<div>
<%=Html.ActionLink("Back to List", "Index") %>
</div>
</asp:Content>
第一行中的Inherits="System.Web.Mvc.ViewPage<MvcCRUDDemo.Models.News>"表示这个View的Model为MvcCRUDDemo.Models.News。另:输入的验证我们会在系列3中讲到
2、添加Controler
右键单击Controller文件夹添加-》Controller
public ActionResult Create()
{
News news = new News { CreateTime = DateTime.Now };
return View(news);
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(News news)
{
NewsDataDataContext dc = new NewsDataDataContext();
dc.News.InsertOnSubmit(news);
dc.SubmitChanges();
return RedirectToAction("NewsList");
}
第一个无参的Create方法是当访问/News/Create时调用,第二个以news做为参数的Create方法是进行post提交时会调用。
三、读取News表中的内容:
1、添加列表视图
在Views文件夹中加入News文件夹,然后在News文件夹上单击右键-》添加-》View,然后按如下选择(注意需要再添加前先编译,不然无法显示Model中的类)
然后在View Content下拉框中选择List
生成的View代码为:
省略...
2、添加列表Controller
右键单击Controller文件夹添加-》Controller,然后添加NewsList()方法,代码如下
public ActionResult NewsList()
{
NewsDataDataContext dc = new NewsDataDataContext();
IEnumerable<News> newsList = dc.News;
return View(newsList);
}
然后修改一下Global文件:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "News", action = "NewsList", id = "" } // Parameter defaults
);
然后就可以浏览defaul.aspx查看结果了。
3、添加details视图
略
5、添加Details的Controller
public ActionResult Details(int id)
{
NewsDataDataContext dc = new NewsDataDataContext();
return View(dc.News.First(n => n.id == id));
}
四、编辑News表内容
1、添加Edit视图
略
2、添加编辑的Controler
public ActionResult Edit(int id)
{
NewsDataDataContext dc = new NewsDataDataContext();
return View(dc.News.First(n => n.id == id));
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formValues)
{
NewsDataDataContext dc = new NewsDataDataContext();
News news = dc.News.First(n => n.id == id);
UpdateModel(news);
dc.SubmitChanges();
return RedirectToAction("Details", new { id = id });
}
只有一个参数的Edit是访问News/Edit/5时调用的方法,而另一个是当提交时调用的方法。提交时调用的Edit方法需要注意的就是UpdateModel方法,这个方法就是利用反射来将从客户端页面收集回来的信息更新到实体类中,所以这个地方最简单的方式就是遵守mvc的默认规则,也就是页面端得input的名字要和实体相同。
五、删除News表中的内容
1、添加删除视图
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcCRUDDemo.Models.News>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Delete
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<div>
<p>
你确认要删除
<%=Html.Encode(Model.Title) %>么? </i>
</p>
</div>
<% using (Html.BeginForm())
{ %>
<input name="confirmButton" type="submit" value="确认" />
<% } %>
</asp:Content>
2、添加删除Controler
public ActionResult Delete(int id)
{
NewsDataDataContext dc = new NewsDataDataContext();
News news = dc.News.First(n => n.id == id);
return View(news);
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Delete(int id, string confirmButton)
{
NewsDataDataContext dc = new NewsDataDataContext();
var news = dc.News.First(n => n.id == id);
dc.News.DeleteOnSubmit(news);
dc.SubmitChanges();
return RedirectToAction("NewsList");
}
六、源码下载
数据库需要自己添加,另外这里的代码为了分步讲解方便,有些重复的地方没有进行优化