`
anzitlan10
  • 浏览: 18615 次
  • 性别: Icon_minigender_1
  • 来自: 柳州
社区版块
存档分类
最新评论

Asp.net MVC 实例

阅读更多
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运行,在主页上点击“测试”,即可体验增删查改的功能。

分享到:
评论

相关推荐

    ASP.NET MVC实例

    两个文档,两个例子!一个是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案例教程 Asp.Net MVC案例教程

    asp.Net mvc4 实例

    vs2010 配sql2008 asp.Net mvc4 开发的实例

    ASP.NET MVC项目实例

    ASP.NET MVC作为微软官方的.NET平台下MVC解决方案,自诞生起就吸引了众多.NET平台开发人员的眼球。ASP.NET MVC从一开始的设计思路就与Struts不同,它的映射是利用路由配置而非xml,从而大大降低了开发复杂度,并且比...

    基于ASP.NET MVC项目实例

    采用mvc三层架构开发的一个商品信息管理项目,包含对信息的增删改查等操作。便于理解mvc(model,view以及Controller的关系)数据库实现,前后台数据交互

    微信支付接口V3.3.7 asp.net mvc实例

    VS 2013 C# asp.net mvc 写的,基本的接口都测试过了. 分享给大家. 其中有一个商户号的字段,对应邮件中是 machId,请开发人员注意了, 不要搞错. JS 方式付款不需要证书,但退款需要证书.需要在服务器上安装一下. 有...

    ExtJs+ASP.NET MVC实例

    ExtJs+ASP.NET MVC实例,案例中将ASP.NET MVC与ExtJs整合在一起,初学者可以参考

    ASP.NET MVC 实例 教程

    ASP.NET MVC 实例 教程 经典中的经典

    asp.net mvc实例源代码 

    asp.net mvc实例源代码 ,mvc 的出现已有一段时间了,有时间需要补充一下这方面的知识。

    一个完整的asp.net mvc架构网站实例

    asp.net mvc架构网站实例.

    Asp.net MVC 3实例学习之ExtShop系列最终源代码

    Asp.net MVC 3实例学习之ExtShop最终源代码

    asp.net mvc实例

    是一份经典的asp.net mvc教程,希望能够给大家帮助!

    ASP.NET MVC 项目集合.zip

    ASP.NET MVC 项目集合

    Asp.net Mvc官方源代码

    微软官方Asp.net Mvc源代码,可以深入理解mvc的原理,内部实现

    asp.net MVC 实例

    一个mvc的实例,是初学mvc的必佳资料

    ASP.NET MVC实战

    《ASP.NET MVC实战》通过一个已经投产的代码营网站实例,介绍了这个框架的方方面面,贯穿《ASP.NET MVC实战》始终的是MVC框架的特性及其重要的设计理念(关注点分离、依赖注入等),一个完整的开发过程(包括建立模型、...

    ASP.NET MVC 5 编程实战(第3版)

    ASP.NET MVC 5 编程实战(第3版)[中文版]从网上下载下来的,备份一下,以免以后丢了

    精通asp.net mvc 4 实例源码

    精通asp.net mvc 4 实例源码,第个章节实例,包含SportsStore.

    vue项目demo(asp.net mvc5+vue2.5)

    本项目是asp.net mvc5+vue2.5的项目,花了很长时间做的。 实现的功能如下: 1.不仅有vue的基本功能,而且设计到vue的组件功能。 2.实现了增删改查的功能,而且是一对多的。 3.后台使用了EF进行操作数据库,EF使用的...

Global site tag (gtag.js) - Google Analytics