MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC,并在vs2010中已经内置了MVC的相关功能。如果使用vs2008,需要下载安装Service Pack 1和ASP.NET MVC Framework。MVC现在已经是2.0的版本。
选择相关开发语言,创建一个 ASP.NET MVC Web Application 项目,选择不需要单元测试,这样生成了一个MVC框架,按Ctrl+F5运行,可看到一个欢迎主页。
注意:使用MVC后不是按链接文件来访问页面,而是通过控制器实现路由链接。
我们通过一个简单的增删查改的功能来体会一下MVC开发的过程。
第一步:模块开发
首先我们创建一个简单的表格:test,该表格只有两个字段:id和name。并创建一个数据类,在Models文件夹中创建一个类,代码如下:
代码
//Test.csusing System;using System.Collections.Generic;using System.Linq;using System.Web; namespace MvcWeb.Models{ public class Test { private int _id = -1; public int id { get { return _id; } set { _id = value; } } public String name {get;set;} }}
然后在Models文件夹中创建一个文件夹:Maping,在此文件中新建一个LINQ to Sql,将test表拖进设计器中,保存。
最后在Models文件夹中新建一个类:TestModel.cs,输入如下代码:
代码
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Data.Linq;using MvcWeb.Models.Maping; namespace MvcWeb.Models{ public static class TestModel { private static TestDbMapingDataContext testDb = new TestDbMapingDataContext(); //返回记录总数 public static int Count() { return testDb.test.Count(); } //分页列表 public static List<Test> GetList(int page, int pageSize) { var query = (from c in testDb.test orderby c.id ascending select c).Skip((page - 1) * pageSize).Take(pageSize); List<Test> result = new List<Test>(); foreach (var t in query) result.Add(FillRecord(t)); return result; } //列表 public static List<Test> GetList() { var query = (from c in testDb.test orderby c.id ascending select c); List<Test> result = new List<Test>(); foreach (var t in query) result.Add(FillRecord(t)); return result; } //修改和插入保存 public static long Save(Test myTest) { try { test t = (from c in testDb.test where c.id == myTest.id select c).FirstOrDefault(); if (t == null) { t = new test(); t.id = myTest.id; t.name = myTest.name; testDb.test.InsertOnSubmit(t); } else { t.name = myTest.name; } testDb.SubmitChanges(); return t.id; } catch(ChangeConflictException ce) { testDb.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues); testDb.SubmitChanges(); } return -1; } //删除记录 public static bool Delete(int id) { try { test t = (from c in testDb.test where c.id == id select c).FirstOrDefault(); testDb.test.DeleteOnSubmit(t); testDb.SubmitChanges(); return t != null; } catch (ChangeConflictException ce) { testDb.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues); testDb.SubmitChanges(); } return false; } //取一条记录 public static Test GetItem(int id) { test t = (from c in testDb.test where c.id == id select c).FirstOrDefault(); return FillRecord(t); } //构造数据对象 private static Test FillRecord(test i) { Test result = null; if (i != null) { result = new Test(); result.id = i.id; result.name = i.name; } return result; } }}
第二步:控制器开发
在Controllers文件夹中右键选择Controller,将生成一个控制器,将文件名改为:TestController.cs,并将代码做些修改,以访问模块:
代码
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using MvcWeb.Models; namespace MvcWeb.Controllers{ public class TestController : Controller { // // GET: /Test/ int pageSize = 3; public ActionResult Index(int page) { if (page * pageSize > TestModel.Count()) page = page - 1; if (page <= 0) page = 1; ViewData["page"] = page; var model = TestModel.GetList(page, pageSize); return View(model); } // // GET: /Test/Details/5 public ActionResult Details(int id) { var model = TestModel.GetItem(id); return View(model); } // // GET: /Test/Create public ActionResult Create() { Test mytest = new Test(); return View(mytest); } // // POST: /Test/Create [HttpPost] public ActionResult Create(int id,FormCollection collection) { try { // TODO: Add insert logic here Test mytest = new Test(); UpdateModel(mytest, collection.ToValueProvider()); if(mytest.name == null) ViewData.ModelState.AddModelError("name", "userName not specified."); if (!ViewData.ModelState.IsValid) throw new InvalidOperationException(); TestModel.Save(mytest); return RedirectToAction("Index?page=1"); } catch(InvalidOperationException ex) { return View(new Test()); } } // // GET: /Test/Edit/5 public ActionResult Edit(int id) { var model = TestModel.GetItem(id); return View(model); } // // POST: /Test/Edit/5 [HttpPost] public ActionResult Edit(int id, FormCollection collection) { try { // TODO: Add update logic here Test mytest = new Test(); UpdateModel(mytest, collection.ToValueProvider()); TestModel.Save(mytest); return RedirectToAction("Index?page=1"); } catch { return View(); } } // // GET: /Test/Delete/5 public ActionResult Delete(int id) { var model = TestModel.GetItem(id); return View(model); } // // POST: /Test/Delete/5 [HttpPost] public ActionResult Delete(int id, FormCollection collection) { try { // TODO: Add delete logic here TestModel.Delete(id); return RedirectToAction("Index", new { page = 1 }); } catch { return View(); } } }}
第三步:视图开发
在控制器的Index方法中按右键,选择“Add View”,作出如下图的选择:
即在Views/Test文件夹下面生成一个视图:Index.aspx,因为我们使用了分页设计,所以在文件后面加上如代码:
<%= Html.ActionLink("Create New", "Create") %> <% =Html.ActionLink("<< 前一页", "Index", new { page = (int)ViewData["Page"] - 1 })%> <% =Html.ActionLink("后一页 >>", "Index", new { page = (int)ViewData["Page"] + 1 })%>
打开Views/Home/Index.aspx,加入一个对Test页面的链接:
<%= Html.ActionLink("测试", "Index?page=1", "Test")%>
按上面的方法在控制器的Create, Edit, Delete生成相关视图,因为主页使用了分页,所以要将返回主页的链接“Back to List”,略作修改:“Index?page=1”。我们可以看看生成的Create.aspx的代码:
代码
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcWeb.Models.Test>" %> <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> Create</asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <h2>Create</h2> <% using (Html.BeginForm()) {%> <%= Html.ValidationSummary(true) %> <fieldset> <legend>Fields</legend> <div class="editor-label"> <%= Html.LabelFor(model => model.id) %> </div> <div class="editor-field"> <%= Html.TextBoxFor(model => model.id) %> <%= Html.ValidationMessageFor(model => model.id) %> </div> <div class="editor-label"> <%= Html.LabelFor(model => model.name) %> </div> <div class="editor-field"> <%= Html.TextBoxFor(model => model.name) %> <%= Html.ValidationMessageFor(model => model.name) %> </div> <p> <input type="submit" value="Create" /> </p> </fieldset> <% } %> <div> <%= Html.ActionLink("Back to List", "Index?page=1") %> </div> </asp:Content>
完成任务,按Ctrl+F5运行,在主页上点击“测试”,即可体验增删查改的功能。
分享到:
相关推荐
两个文档,两个例子!一个是MVC学习有名的例子NerdDinner,另一个是My Movie List。文档步骤详细,适合初学者学习。My Movie List这个例子已做,有源码,供大家参考。
Asp.Net MVC案例教程 Asp.Net MVC案例教程 Asp.Net MVC案例教程 Asp.Net MVC案例教程 Asp.Net MVC案例教程 Asp.Net MVC案例教程
vs2010 配sql2008 asp.Net mvc4 开发的实例
ASP.NET MVC作为微软官方的.NET平台下MVC解决方案,自诞生起就吸引了众多.NET平台开发人员的眼球。ASP.NET MVC从一开始的设计思路就与Struts不同,它的映射是利用路由配置而非xml,从而大大降低了开发复杂度,并且比...
采用mvc三层架构开发的一个商品信息管理项目,包含对信息的增删改查等操作。便于理解mvc(model,view以及Controller的关系)数据库实现,前后台数据交互
VS 2013 C# asp.net mvc 写的,基本的接口都测试过了. 分享给大家. 其中有一个商户号的字段,对应邮件中是 machId,请开发人员注意了, 不要搞错. JS 方式付款不需要证书,但退款需要证书.需要在服务器上安装一下. 有...
ExtJs+ASP.NET MVC实例,案例中将ASP.NET MVC与ExtJs整合在一起,初学者可以参考
ASP.NET MVC 实例 教程 经典中的经典
asp.net mvc实例源代码 ,mvc 的出现已有一段时间了,有时间需要补充一下这方面的知识。
asp.net mvc架构网站实例.
Asp.net MVC 3实例学习之ExtShop最终源代码
是一份经典的asp.net mvc教程,希望能够给大家帮助!
ASP.NET MVC 项目集合
微软官方Asp.net Mvc源代码,可以深入理解mvc的原理,内部实现
一个mvc的实例,是初学mvc的必佳资料
《ASP.NET MVC实战》通过一个已经投产的代码营网站实例,介绍了这个框架的方方面面,贯穿《ASP.NET MVC实战》始终的是MVC框架的特性及其重要的设计理念(关注点分离、依赖注入等),一个完整的开发过程(包括建立模型、...
ASP.NET MVC 5 编程实战(第3版)[中文版]从网上下载下来的,备份一下,以免以后丢了
精通asp.net mvc 4 实例源码,第个章节实例,包含SportsStore.
本项目是asp.net mvc5+vue2.5的项目,花了很长时间做的。 实现的功能如下: 1.不仅有vue的基本功能,而且设计到vue的组件功能。 2.实现了增删改查的功能,而且是一对多的。 3.后台使用了EF进行操作数据库,EF使用的...