MVC架构增删改操作实例.docx

上传人:b****6 文档编号:7422539 上传时间:2023-05-11 格式:DOCX 页数:14 大小:299.15KB
下载 相关 举报
MVC架构增删改操作实例.docx_第1页
第1页 / 共14页
MVC架构增删改操作实例.docx_第2页
第2页 / 共14页
MVC架构增删改操作实例.docx_第3页
第3页 / 共14页
MVC架构增删改操作实例.docx_第4页
第4页 / 共14页
MVC架构增删改操作实例.docx_第5页
第5页 / 共14页
MVC架构增删改操作实例.docx_第6页
第6页 / 共14页
MVC架构增删改操作实例.docx_第7页
第7页 / 共14页
MVC架构增删改操作实例.docx_第8页
第8页 / 共14页
MVC架构增删改操作实例.docx_第9页
第9页 / 共14页
MVC架构增删改操作实例.docx_第10页
第10页 / 共14页
MVC架构增删改操作实例.docx_第11页
第11页 / 共14页
MVC架构增删改操作实例.docx_第12页
第12页 / 共14页
MVC架构增删改操作实例.docx_第13页
第13页 / 共14页
MVC架构增删改操作实例.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

MVC架构增删改操作实例.docx

《MVC架构增删改操作实例.docx》由会员分享,可在线阅读,更多相关《MVC架构增删改操作实例.docx(14页珍藏版)》请在冰点文库上搜索。

MVC架构增删改操作实例.docx

MVC架构增删改操作实例

1、添加一个Model

  添加Model和添加普通类的操作是一样的,默认的约定是将它放在Models文件夹中。

我们在Models文件夹上面点击右键,选择“添加”>“LinqtoSql”,在打开的对话框中输入类名“Book”,点击“添加”按钮。

编辑器会为我们打开BookInfo.dbml,从左侧服务器资源管理器中拖拽需要的数据库对象到dbml文件中,之后该文件将自动包含数据库对象对应的实例类和操作类。

这个类中包含了数据库表中的记录和对记录的各种操作。

每一个Book类的实例对应数据库中的一行,Book类中的每一个属性被映射到数据库中的一列。

2、添加数据库上下文

  在Models文件夹下新建一个名为“BookDbContext”的类,编辑这个类,将该类派生自“DbContext”类,编辑后的代码如下:

  查看“BookInfo.dbml”文件对应的“BookInfo.designer.cs”文件,其中的BookInfoDataContext类继承了System.Data.Linq.DataContext。

BookInfoDataContext代表Book在数据库中的上下文对象,通过该类使数据库和实体类关联起来需要添加System.Data.Entity的引用。

3、添加数据库连接

  由于我们创建的是空的Mvc项目,所以在Web.config文件中,不包含任何的数据库连接字符串,我们打开Web.config文件,为它添加一个数据库连接字符串的配置:

providerName="System.Data.SqlClient"/>

  我们将数据库连接的name属性设置为“BookDbContext”,这个连接会被BookDbContext类使用,并根据连接创建相应的数据库。

4、为Book创建控制器和Index视图

  按照第一节中的步骤,我们为Book模型创建一个控制器:

在文件夹“Controllers”上面点击右键>“添加”>“控制器”,在打开的添加控制器对话框中,将控制器的名称修改为“BookController”,基架选择中的模板选择“空控制器”,如下图:

  点击“添加”按钮后,VS会添加一个BookController的文件,该文件处于打开状态。

编辑Index方法的代码,查找作者为Tom的图书:

publicActionResultIndex()

{

varbooks=frombindb.Books

whereb.Author=="Tom"

selectb;

returnView(books.ToList());

}

  在这段代码中,db是类BookDbContext的一个实例,我们在Controller类中定义如下:

BookDbContextdb=newBookDbContext();

  这是一个简单的Linq查询,在对数据库进行操作时,EF会检查当前的数据连接指定的数据库是否被创建,如果没有则有EF负责根据实体模型类创建数据库、数据表;如果存在,EF会将查询条件添加到Sql查询语句,再将Sql语句发送到数据库进行数据读取。

在完成数据读取后,将数据转换为实体对象集合。

EF对数据库的操作大致如此。

  在Index方法内点击右键>“添加视图”,在打开的“添加视图”对话框,勾选“创建强类型视图”,在模型类列表中选择“Book(MvcHelloworld.Models)”,在支架模板列表中选择“List”,如下图:

  点击“添加”按钮,VS为我们在Views文件夹下创建了“Book”文件夹,并在Book文件夹中添加了文件“Index.cshtml”。

  Index.cshtml是我们的视图页面,我们可以把它看做一个模板,将我们的数据按照模板的格式进行输出。

在这个模板中,我们使用了Razor视图引擎,在Razor中,我们可以使用@model用来指定传到视图的Model类型,访问传入视图的数据内容。

我们简单的修改代码,如果你了解HTML,这将是很简单的事情:

@modelIEnumerable

@{

ViewBag.Title="图书列表-MvcBook";

}

图书列表

@Html.ActionLink("增加图书","Create")

@foreach(variteminModel){

}

图书名称

作者

出版社

价格

备注

@Html.DisplayFor(modelItem=>item.BookName)

@Html.DisplayFor(modelItem=>item.Author)

@Html.DisplayFor(modelItem=>item.Publisher)

@Html.DisplayFor(modelItem=>item.Price)

@Html.DisplayFor(modelItem=>item.Remark)

@Html.ActionLink("编辑","Edit",new{id=item.BookID})|

@Html.ActionLink("查看","Details",new{id=item.BookID})|

@Html.ActionLink("删除","Delete",new{id=item.BookID})

  编译并运行程序,在浏览器中输入地址:

http:

//localhost:

xxx/Book,得到的运行结果如下:

5、增加Create视图

  “增加图书”连接需要我们有一个Create控制器和与之对应的视图。

打开BookController文件,添加一个Create方法,代码如下:

publicActionResultCreate()

{

returnView();

}

  这个方法返回一个视图,该视图中包含了用户要输入的表单。

现在我们来实现这个Create视图,我们将在这个视图中向用户显示追加数据时所需要用到的表单。

在Create方法中点击鼠标右键,并点击上下文菜单中的“添加视图”。

在“添加视图”对话框中勾选“创建强类型视图”,在模型类列表中选择“Book(MvcHelloworld.Models)”,在支架模板列表中选择“Create”,如下图:

  点击“添加”按钮,VS会在Views/Book目录下添加一个Create.cshtml文件,由于我们选择了Create支架模板,所以在VS为我们生成了一些默认的代码。

在这个视图模板中,我们指定了强类型Book作为它的模型类,VS检查Book类,并根据Book类的属性,生成了对应的标签名和编辑框,我们修改标签名,使它显示中文,修改后的代码如下:

@modelMvcHelloworld.Models.Book

@{

ViewBag.Title="新增图书-MvcBook";

}

新增图书

@using(Html.BeginForm()){

@Html.ValidationSummary(true)

图书

图书名称

@Html.EditorFor(model=>model.BookName)

@Html.ValidationMessageFor(model=>model.BookName)

作者

@Html.EditorFor(model=>model.Author)

@Html.ValidationMessageFor(model=>model.Author)

出版社

@Html.EditorFor(model=>model.Publisher)

@Html.ValidationMessageFor(model=>model.Publisher)

价格

@Html.EditorFor(model=>model.Price)

@Html.ValidationMessageFor(model=>model.Price)

备注

@Html.EditorFor(model=>model.Remark)

@Html.ValidationMessageFor(model=>model.Remark)

}

@Html.ActionLink("BacktoList","Index")

分析这段代码:

@modelMvcHelloworld.Models.Book:

指定了该视图模板中的“模型”强类型化成一个Book类。

@using(Html.BeginForm()){}:

创建一个Form表单,在表单中包含了对于Book类所生成的对应字段。

@Html.EditorFor(model=>model.BookName):

根据模型生成模型中BookName的编辑控件(生成一个Input元素)

@Html.ValidationMessageFor(model=>model.BookName):

根据模型生成模型中BookName的验证信息。

编译项目,在浏览器中输入http:

//localhost:

xxx/Book/Create, 查看新增界面,截图如下:

6、添加Create的Postback方法

  在完成了添加Create视图后,我们仅是可以将添加界面显示出来,并不能实际的完成数据的添加,因为我们还没有增加按钮的处理方法,没有实际的处理添加事件。

为了能够完成数据的增加,下面我们来添加一个Create的POSTBack方法,代码如下:

[HttpPost]

publicActionResultCreate(BOOK_INFObook)

{

if(ModelState.IsValid)

{

BookInfoDataContextbookInfoDataContext=newBookInfoDataContext();

bookInfoDataContext.BOOK_INFO.InsertOnSubmit(book);

bookInfoDataContext.SubmitChanges();

returnRedirectToAction("Index");

}

else

returnView(book);

}

  这时,我们在页面上输入数据,并点击“增加”按钮时,EF就会通过这段代码来添加一行数据库记录。

打开数据库,我们可以看到如下记录:

7、设置实体模型的数据验证

  在ASP.NETMVC中,有一条作为核心的原则,就是DRY(“Don’tRepeatYourself,中文意思为:

不要让开发者重复做同样的事情,即“一处定义、处处可用”)原则。

这样可以减少开发者的代码编写量,同时也更加便于代码的维护。

  ASP.NETMVC与EFcode-first提供的默认验证规则就是一个实现DRY原则的很好的例子。

你也可以在模型类中显式地追加一个验证规则,然后在整个应用程序中都使用这个验证规则。

  打开Book模型文件,添加 System.ComponentModel.DataAnnotations 的引用,并修改实体类的代码如下:

publicclassBook

{

publicintBookID{get;set;}

[Required(ErrorMessage="必须输入图书名称")]

[StringLength(maximumLength:

100,MinimumLength=1,ErrorMessage="最多允许输入100个字符")]

publicstringBookName{get;set;}

[Required(ErrorMessage="必须输入作者名称")]

publicstringAuthor{get;set;}

[Required(ErrorMessage="必须输入出版社")]

publicstringPublisher{get;set;}

publicdecimalPrice{get;set;}

publicstringRemark{get;set;}

}

  将数据库中之前生成的数据库db_Book删除掉,重新生成解决方案,打开新增页面,不输入任何数据的时候点击“增加”按钮,这个时侯,界面上会出现一些提示信息,并且阻止了我们进行数据的提交操作。

界面如下:

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Linq;

usingSystem.Web;

usingSystem.Web.Mvc;

usingMvcStudy.Models;

namespaceMvcStudy.Controllers

{

publicclassBookController:

Controller

{

publicActionResultIndex()

{

BookInfoDataContextbookInfoDataContext=newBookInfoDataContext();

varbooks=frombinbookInfoDataContext.BOOK_INFOselectb;

returnView(books.ToList());

}

publicActionResultCreate()

{

returnView();

}

[HttpPost]

publicActionResultCreate(BOOK_INFObook)

{

if(ModelState.IsValid)

{

BookInfoDataContextbookInfoDataContext=newBookInfoDataContext();

bookInfoDataContext.BOOK_INFO.InsertOnSubmit(book);

bookInfoDataContext.SubmitChanges();

returnRedirectToAction("Index");

}

else

returnView(book);

}

publicActionResultEdit(intbookID)

{

BookInfoDataContextbookInfoDataContext=newBookInfoDataContext();

BOOK_INFObook=bookInfoDataContext.BOOK_INFO.First(b=>b.BOOK_ID==bookID);

if(book==null)

returnRedirectToAction("Index");

returnView(book);

}

[HttpPost]

publicActionResultEdit(BOOK_INFOnewBook)

{

try

{

BookInfoDataContextbookInfoDataContext=newBookInfoDataContext();

BOOK_INFOoldBook=bookInfoDataContext.BOOK_INFO.First(b=>b.BOOK_ID==newBook.BOOK_ID);

UpdateModel(oldBook);

bookInfoDataContext.SubmitChanges();

returnRedirectToAction("Details",new{bookID=newBook.BOOK_ID});

}

catch(Exceptionex)

{

ModelState.AddModelError("","修T改?

失º¡ì败㨹,ê?

请?

查¨¦看¡ä详¨º细?

错䨪误¨®信?

息¡é:

"+ex.Message);

}

returnView(newBook);

}

publicActionResultDetails(intbookID)

{

BookInfoDataContextbookInfoDataContext=newBookInfoDataContext();

BOOK_INFObook=bookInfoDataContext.BOOK_INFO.First(p=>p.BOOK_ID==bookID);

if(book==null)

returnRedirectToAction("Index");

returnView(book);

}

publicActionResultDelete(intbookID)

{

BookInfoDataContextbookInfoDataContext=newBookInfoDataContext();

BOOK_INFObook=bookInfoDataContext.BOOK_INFO.First(p=>p.BOOK_ID==bookID);

if(book==null)

returnRedirectToAction("Index");

returnView(book);

}

[HttpPost]

publicActionResultDelete(intbookID,FormCollectioncollection)

{

BookInfoDataContextbookInfoDataContext=newBookInfoDataContext();

BOOK_INFObook=bookInfoDataContext.BOOK_INFO.First(p=>p.BOOK_ID==bookID);

bookInfoDataContext.BOOK_INFO.DeleteOnSubmit(book);

bookInfoDataContext.SubmitChanges();

returnRedirectToAction("Index");

}

}

}

编辑界面:

删除界面:

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2