MVC架构增删改操作实例Word下载.docx
- 文档编号:18496246
- 上传时间:2022-12-17
- 格式:DOCX
- 页数:14
- 大小:299.15KB
MVC架构增删改操作实例Word下载.docx
《MVC架构增删改操作实例Word下载.docx》由会员分享,可在线阅读,更多相关《MVC架构增删改操作实例Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
/connectionStrings>
我们将数据库连接的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<
MvcHelloworld.Models.Book>
@{
ViewBag.Title="
图书列表-MvcBook"
;
}
<
h2>
图书列表<
/h2>
p>
@Html.ActionLink("
增加图书"
"
Create"
)
/p>
table>
tr>
th>
图书名称
/th>
作者
出版社
价格
备注
/tr>
@foreach(variteminModel){
td>
@Html.DisplayFor(modelItem=>
item.BookName)
/td>
item.Author)
item.Publisher)
item.Price)
item.Remark)
编辑"
Edit"
new{id=item.BookID})|
查看"
Details"
删除"
Delete"
new{id=item.BookID})
/table>
编译并运行程序,在浏览器中输入地址:
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
新增图书-MvcBook"
新增图书<
scriptsrc="
@Url.Content("
~/Scripts/jquery.validate.min.js"
)"
type="
text/javascript"
>
/script>
~/Scripts/jquery.validate.unobtrusive.min.js"
@using(Html.BeginForm()){
@Html.ValidationSummary(true)
fieldset>
legend>
图书<
/legend>
divclass="
editor-label"
/div>
editor-field"
@Html.EditorFor(model=>
model.BookName)
@Html.ValidationMessageFor(model=>
model.Author)
model.Publisher)
model.Price)
model.Remark)
inputtype="
submit"
value="
增加"
/fieldset>
div>
BacktoList"
Index"
分析这段代码:
@modelMvcHelloworld.Models.Book:
指定了该视图模板中的“模型”强类型化成一个Book类。
@using(Html.BeginForm()){}:
创建一个Form表单,在表单中包含了对于Book类所生成的对应字段。
@Html.EditorFor(model=>
model.BookName):
根据模型生成模型中BookName的编辑控件(生成一个Input元素)
@Html.ValidationMessageFor(model=>
根据模型生成模型中BookName的验证信息。
编译项目,在浏览器中输入http:
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("
);
}
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;
[Required(ErrorMessage="
必须输入作者名称"
publicstringAuthor{get;
必须输入出版社"
publicstringPublisher{get;
publicdecimalPrice{get;
publicstringRemark{get;
将数据库中之前生成的数据库db_Book删除掉,重新生成解决方案,打开新增页面,不输入任何数据的时候点击“增加”按钮,这个时侯,界面上会出现一些提示信息,并且阻止了我们进行数据的提交操作。
界面如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.Mvc;
usingMvcStudy.Models;
namespaceMvcStudy.Controllers
{
publicclassBookController:
Controller
publicActionResultIndex()
varbooks=frombinbookInfoDataContext.BOOK_INFOselectb;
publicActionResultCreate()
publicActionResultEdit(intbookID)
BOOK_INFObook=bookInfoDataContext.BOOK_INFO.First(b=>
b.BOOK_ID==bookID);
if(book==null)
publicActionResultEdit(BOOK_INFOnewBook)
try
BOOK_INFOoldBook=bookInfoDataContext.BOOK_INFO.First(b=>
b.BOOK_ID==newBook.BOOK_ID);
UpdateModel(oldBook);
new{bookID=newBook.BOOK_ID});
catch(Exceptionex)
ModelState.AddModelError("
修T改?
失º
¡
ì
败ã
¨
¹
,ê
?
请?
查¨
¦
看¡
ä
详¨
º
细?
错ä
ª
误¨
®
信?
息¡
é
:
+ex.Message);
returnView(newBook);
publicActionResultDetails(intbookID)
BOOK_INFObook=bookInfoDataContext.BOOK_INFO.First(p=>
p.BOOK_ID==bookID);
if(book==null)
publicActionResultDelete(intbookID)
publicActionResultDelete(intbookID,FormCollectioncollection)
bookInfoDataContext.BOOK_INFO.DeleteOnSubmit(book);
编辑界面:
删除界面:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MVC 架构 增删 操作 实例