精华内容
下载资源
问答
  • 采用mvc三层架构开发的一个商品信息管理项目,包含对信息的增删改查等操作。便于理解mvc(model,view以及Controller的关系)数据库实现,前后台数据交互
  • ASP.NET MVC 开发实例:简单留言板的开发上一个例子 我们使用手动创建一个注册会员的实例,熟悉了一下视图、控制器、MODEL之间的关联,对MVC有了一个初步的了解。本例子是一个ASP.NET MVC开发简单留言板的例程,使用...

    ASP.NET MVC 开发实例:简单留言板的开发

    上一个例子 我们使用手动创建一个注册会员的实例,熟悉了一下视图、控制器、MODEL之间的关联,对MVC有了一个初步的了解。

    本例子是一个ASP.NET MVC开发简单留言板的例程,使用了MVC已经配置好的组件进行开发,也许你会惊讶于开发的速度,在还没怎么动手,程序已经可以写入数据库了,增删改一个不少的呢!本例程参考《ASP.NET MVC 4开发指南》第三章:新手上路初体验。有需要的朋友请购买本书。

    现在,我们从新建项目开始。

    mvc-11.jpg

    新建一个项目,名字取为GuestBook,点击确定。

    e7379a589859

    在弹出来的新建项目窗口上,选择为MVC模板。

    构建文件需要一点时间,完成了以后按F5已经可以运行网站了。可以看见,ASP.NET MVC为我们打造了一个美观大方的首页。

    下面我们来创建数据模型:

    第一步:在“解决方案资源管理器”窗口选择Models目录,右击,在弹出的菜单选择添加-类,取名为Guestbook.cs,点击添加。

    第二步:修改Guestbook.cs代码,定义出一个基本留言板所需要的数据类型.

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    namespace GuestBook.Models

    {

    public class Guestbook

    {

    public int Id { get; set; }

    public string Name { get; set; }

    public string Email { get; set; }

    public string Content { get; set; }

    }

    }

    第三步:点击Ctrl+Shift+B,生成解决方案。也就是将这个类进行编译。

    做过上一个实例的朋友一定会明白,为什么需要进行编译。接下来,我们将创建控制器、动作和视图。

    第一步:在“解决方案资源管理器”窗口选择Controllers目录,右击,在弹出的菜单选择控制器。

    mvc-13.jpg

    第二步:选择包含视图的MVC5控制器(使用Entity Framework)

    mvc-14.jpg

    第三步:弹出添加控制器的对话框,模型类选择Guestbook(GuestBook.Models),数据上下文点击右端的加号,会自动弹出一个对话框,默认“GuestBook.Models.GuestBookContext”点击添加,控制器默认为GuestbooksController,点击添加。

    好了,完成了留言板了。

    点击F5,http://localhost:/Guestbooks/Index 浏览一下,是不是已经有了,还有Create New等页面十分标致。

    e7379a589859

    的确,这样的页面很省事,但满足不了我们的要求,一般来说,一个自动生成的程序,我们需要对它页面UI、程序功能进行修改。页面修改其实不难,一些功能上的修改就显得有点困难了。

    例如,像上一节的例子一样,我们需要增加一些输入验证,以防止用户一些无效的输入。你也许会说,这个不难,前面我学习了。于是打开Guestbook.cs进行修改。

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    using System.ComponentModel.DataAnnotations;

    namespace GuestBook.Models

    {

    public class Guestbook

    {

    public int Id { get; set; }

    [Required(ErrorMessage = "请输入用户名。")]

    public string Name { get; set; }

    [Required(ErrorMessage = "请输入Email。")]

    public string Email { get; set; }

    [Required(ErrorMessage = "请输入内容。")]

    public string Content { get; set; }

    }

    }

    然后运行一看,傻眼了,出错了。

    这是因为在使用EF Code First时,当Model发生变更时,默认会引起System.InvalidOperationException异常。

    那么要怎么办呢?

    解决问题的最简单的方法就是砍掉整个数据库重建。关于如何迁移数据,点击 http://msdn.microsoft.com/en-us/data/jj591621.aspx 有详细说明。现在我们在新建整段代码,数据丢失并没有多大问题。

    打开Global.asax.cs,在protected void Application_Start() 下面输入代码:

    protected void Application_Start()

    {

    System.Data.Entity.Database.SetInitializer(new System.Data.Entity.DropCreateDatabaseIfModelChanges());

    AreaRegistration.RegisterAllAreas();

    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

    RouteConfig.RegisterRoutes(RouteTable.Routes);

    BundleConfig.RegisterBundles(BundleTable.Bundles);

    }

    运行一下,错误解除。当然数据也就消失了。

    现在可以随意的修改Guestbook.cs文件了,例如做如下修改:

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Web;

    using System.ComponentModel;

    using System.ComponentModel.DataAnnotations;

    namespace GuestBook.Models

    {

    public class Guestbook

    {

    public int Id { get; set; }

    [Required]

    [DisplayName("姓名")]

    public string Name { get; set; }

    [Required]

    [DisplayName("电子邮件")]

    public string Email { get; set; }

    [Required]

    [DisplayName("内容")]

    public string Content { get; set; }

    }

    }

    这样我们就可以放心调试,数据丢失了也没什么大问题。一直修改到我们满意为止。

    但是如果将来产品上线了,要记得去掉刚刚写在Global.asax.cs文件上的代码。否则修改模型的话,数据又将丢失。

    下面进行代码重构,留言板只需要显示留言和增加留言。对页面进行重构的同时增强对MVC的认识。

    首先,打开Controller文件夹,对GuestbooksController.cs文件进行修改。

    using System;

    using System.Collections.Generic;

    using System.Data;

    using System.Data.Entity;

    using System.Linq;

    using System.Net;

    using System.Web;

    using System.Web.Mvc;

    using GuestBook.Models;

    namespace GuestBook.Controllers

    {

    public class GuestbooksController : Controller

    {

    private GuestBookContext db = new GuestBookContext();

    // 显示留言

    // GET: Guestbooks

    public ActionResult Index()

    {

    return View(db.Guestbooks.ToList());

    }

    // GET: Guestbooks/Details/5

    public ActionResult Details(int? id)

    {

    if (id == null)

    {

    return new HttpStatusCodeResult(HttpStatusCode.BadRequest);

    }

    Guestbook guestbook = db.Guestbooks.Find(id);

    if (guestbook == null)

    {

    return HttpNotFound();

    }

    return View(guestbook);

    }

    // GET: Guestbooks/Create

    public ActionResult Write()

    {

    return View();

    }

    // POST: Guestbooks/Create

    // 为了防止“过多发布”攻击,请启用要绑定到的特定属性,有关

    // 详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=317598。

    [HttpPost]

    [ValidateAntiForgeryToken]

    public ActionResult Write([Bind(Include = "Id,Name,Email,Content")] Guestbook guestbook)

    {

    if (ModelState.IsValid)

    {

    db.Guestbooks.Add(guestbook);

    db.SaveChanges();

    return RedirectToAction("Index");

    }

    return View(guestbook);

    }

    protected override void Dispose(bool disposing)

    {

    if (disposing)

    {

    db.Dispose();

    }

    base.Dispose(disposing);

    }

    }

    }

    可以看出,我们已经将编辑、删除的有关代码给去掉(因为留言板不需要这些功能,如果需要也是在管理员的权限下面,此处不做这方面的讨论),将Create改成Write,同样的,我们也需要将Create.cshtml改名为Write.cshtml,下面我们看看它的源代码:

    @model GuestBook.Models.Guestbook

    @{

    ViewBag.Title = "Write";

    }

    留下足迹

    @using (Html.BeginForm())

    {

    @Html.AntiForgeryToken()

    Guestbook


    @Html.ValidationSummary(true, "", new { @class = "text-danger" })

    @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })

    @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })

    @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })

    @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })

    @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })

    @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })

    @Html.LabelFor(model => model.Content, htmlAttributes: new { @class = "control-label col-md-2" })

    @Html.EditorFor(model => model.Content, new { htmlAttributes = new { @class = "form-control" } })

    @Html.ValidationMessageFor(model => model.Content, "", new { @class = "text-danger" })

    }

    @Html.ActionLink("回到留言列表", "Index")

    @section Scripts {

    @Scripts.Render("~/bundles/jqueryval")

    }

    运行测试成功,页面自动返回到index处,这个页面也需要进行修改,打开index.cshtml文件:

    @model IEnumerable

    @{

    ViewBag.Title = "Index";

    }

    Index

    @Html.ActionLink("写下留言", "Write")

    @Html.DisplayNameFor(model => model.Name)

    @Html.DisplayNameFor(model => model.Email)

    @Html.DisplayNameFor(model => model.Content)

    @foreach (var item in Model) {

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

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

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

    @Html.ActionLink("显示留言", "Details", new { id=item.Id })

    }

    显示留言页面也稍微做个更改:

    @model GuestBook.Models.Guestbook

    @{

    ViewBag.Title = "Details";

    }

    Details

    Guestbook


    @Html.DisplayNameFor(model => model.Name)

    @Html.DisplayFor(model => model.Name)

    @Html.DisplayNameFor(model => model.Email)

    @Html.DisplayFor(model => model.Email)

    @Html.DisplayNameFor(model => model.Content)

    @Html.DisplayFor(model => model.Content)

    @Html.ActionLink("回到留言列表", "Index")

    好了,运行程序,这个留言板已经基本可以满足我们的要求了。它并不完美,但它对初学者来说,是一次非常不错的开发入门之旅。

    从下一章开始,我们将入门再入得深一点点,开发一个简单商城网站实例,谢谢您的支持。转帖的时候请把凉风有兴或者AlexZeng.net进行署名。本文版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)

    展开全文
  • 一个完整的asp.net mvc架构网站实例

    热门讨论 2017-03-13 23:35:37
    asp.net mvc架构网站实例.
  • ASP.NET MVC 示例源代码

    2018-11-16 11:06:21
    是一个关于音乐商店的Web源代码。使用ASP.NET MVC框架编写。示例代码,仅供学习参考
  • ASP.NET MVC 4 开发指南》是由台湾知名博客站长与畅销书作者“Will保哥”所撰写的ASP.NETMVC4开发指南,融入作者多年实务开发工作之精髓,从基础观念、技术讲解、开发实例、开发技巧到安装部署,都将以深入浅出的...
  • asp.Net mvc4 实例

    2014-04-23 20:41:55
    vs2010 配sql2008 asp.Net mvc4 开发实例
  • 由Microsoft专家和极受敬重的软件开发社区负责人撰写的《ASP.NET MVC 4高级编程(第4版)》将带您学习最前沿的Web框架:ASP.NET MVC 4。本书开篇简要介绍ASP.NET MVC框架,然后直奔主题,讨论使用ASP.NET和最新...
  • ASP.NET MVC 4 开发指南》是由台湾知名博客站长与畅销书作者“Will保哥”所撰写的ASP.NETMVC4开发指南,融入作者多年实务开发工作之精髓,从基础观念、技术讲解、开发实例、开发技巧到安装部署,都将以深入浅出的...
  • ASP.NET MVC 5 编程实战(第3版)[中文版]从网上下载下来的,备份一下,以免以后丢了
  • asp.net MVC3实例开发ppt

    2014-03-13 12:18:05
    asp.net MVC3实例开发教程,是基于ASP.NET MVC3+ADO.NET4+EF4.1+Jquery+插件等技术下的CRM企业客户管理系统,asp.net MVC3实例开发教程由北风网提供,asp.net MVC3实例开发教程包括:营销管理、客户管理、服务管理、...
  • 本书以实例演示的方式介绍了很多与ASP.NET MVC相关的很好实践,同时还提供了一系列实用性的扩展,相信它们一定能够解决你在真实开发过程中遇到的很多问题。本书末章提供的案例不仅仅用于演示实践中的ASP.NET MVC,很...
  • C#开发1200例(包括1,2卷)+ASP.Net MVC开发1200例+C#编程经典实例,全是经典中的经典书籍
  • 本书以实例演示的方式介绍了很多与ASP.NET MVC相关的很好实践,同时还提供了一系列实用性的扩展,相信它们一定能够解决你在真实开发过程中遇到的很多问题。本书末章提供的案例不仅仅用于演示实践中的ASP.NET MVC,很...
  • Asp.net MVC实例第一步

    千次阅读 2018-06-27 09:46:34
    1.首先创建一个mvc项目点击确定选择一个空的模板,勾选MVC那么一个基本的mvc项目已经创建此时可以点击Debug进行调试,但是会出现如下界面因为此时还没有创建任何控制器和视图添加控制器点击添加后给控制器命名为...

    1.首先创建一个mvc项目


    点击确定


    选择一个空的模板,勾选MVC


    那么一个基本的mvc项目已经创建

    此时可以点击Debug进行调试,但是会出现如下界面


    因为此时还没有创建任何控制器和视图

    添加控制器


    点击添加后给控制器命名为HomeController

    打开Home控制器,发现里面有一个已经生成的默认的Index的返回视图

    创建index视图有两种方式:

    第一种:直接在controller中的index上右键选择添加视图即可


    第二种:在Views文件下的刚刚生成的Home文件夹下右键创建视图,选择empty即可

    不添加布局页。

    在创建好的index视图页中有

    @{
        Layout = null;

    }

    这是一个简单的Razor引擎表达式,这代表未使用布局页。

    这个地方介绍一下渲染和呈现


    下面通过Razor表达式的ViewBag来接收一些信息

    首先是HomeController里面

    public ActionResult Index()
            {
                int hour = DateTime.Now.Hour;
                ViewBag.Greeting = hour < 12 ? "Good Morning" : "Good Afternoon";
                return View();

            }

    然后在index的视图页中的div标签中添加

     @ViewBag.Greeting (from the view)

    就可以看到效果了。

    接下来创建一个模型GuestResponse


    在类中定义一些属性及其get、set方法

     public class GuestResponse
        {
            public string Name { get; set; }
            public string Email { get; set; }     
            public string Phone { get; set; }
            public bool? WillAttend { get; set; }//willattend可为空

        }

    2.表单验证及跳转

    首先创建一个承载表单的视图RSVP,这是一个强类型视图


    @model WebApplication1.Models.GuestResponse

    在创建好的强类型视图中会有如上一个Razor表达式。这代表强类型视图。

    然后我们先在index页面添加上一个跳转到此页面的链接

        <div>
            @Html.ActionLink("RSVP Now", "Rsvp")
        </div>

        第一个参数是要跳转链接所呈现的文本,可自行定义,第二个参数是跳转页面所调用的函数

    此时还未创建。

    在HomeController里面创建Rsvp返回视图页面的函数

     public ActionResult RSVP()
            {
                return View();

            }

    在RSVP页面创建一个表单


    <div >  
            <div >
                @using (Html.BeginForm())//Razor表达式
                {//s使用HTML辅助器从@model中读取所需信息     
                                <p>姓名:@Html.TextBoxFor(x => x.Name)</p>//lamda表达式
                                            <p>邮箱:@Html.TextBoxFor(x => x.Email)</p>
                                            <p>电话:@Html.TextBoxFor(x => x.Phone)</p>
                                            <p>
                                                Will you attend?
                                                @Html.DropDownListFor(x => x.WillAttend, new[]
        {
           new SelectListItem() {Text = "Yes,I'll be there",Value = bool.TrueString },
           new SelectListItem() {Text = "No,I can't come",Value = bool.FalseString }
        }, "选择一个")
                                            </p>

                                            <input type="submit" value="Submit Rsvp" />//此时单击只会清楚表单中已经输入的值,这是因为该表单会回递给home控制器中RsvpForm动作方法,这只是告诉MVC再次渲染该视图


                 }
            </div>

        </div>

    在模型中添加验证

     public class GuestResponse
        {
            [Required(ErrorMessage ="请输入你的姓名")]
            public string Name { get; set; }
            [Required(ErrorMessage ="请输入邮箱")]
            [RegularExpression(".+\\@.+\\..+", ErrorMessage = "输入的邮箱格式不正确")]
            public string Email { get; set; }
            [Required(ErrorMessage ="请输入电话号码")]
            public string Phone { get; set;}
            [Required(ErrorMessage ="请输入你是否想参加")]
            public bool? WillAttend { get; set; }//willattend可为空
        }

    对于每次点击提交重新渲染视图的问题采用一种类似重载的方式来解决

    [HttpGet]
            public ActionResult RsvpForm()
            {         
                return View();
            }
            [HttpPost]
            public ActionResult RsvpForm(GuestResponse gp)
            {
                if (ModelState.IsValid)
                {
                    return View("Thanks", gp);
                }
                else
                { 
                    return View();
                }

            }

    可以看到两者的主要区别在于响应HTTP的方式

    一种为get,一种为post,get请求是在点击一个链接时,浏览器正常发出的请求,当第一次访问RSVP中的表单时,正常显示为空白的表单;而当用HTML.BeginForm()渲染表达时,所默认的情况下是 post请求提交  。

    Thanks视图页面代码

    <div >
            <h1>Thank you, @Model.Name!</h1>
            <div >
                @if (Model.WillAttend == true)
                {
                    @:It's great that you're coming.The drinks are already in the fridge!
                }
                else
                {
                    @:Sorry to hear that you can't make it, but thanks for letting us know.
                 }
            </div>

        </div>

    RSVP界面需要添加一个行代码用于返回表单验证的提示信息

     @using (Html.BeginForm())//Razor表达式
                {//s使用HTML辅助器从@model中读取所需信息
                    @Html.ValidationSummary()//返回验证消息的未排序列表

    3.添加样式表

    首先选中项目右键选择添加新文件夹,命名为Content

    然后再Content上右键添加样式表Styles.css

    再样式表中添加样式

    .field-validation-error{color:#f00;}
    .field-validation-valid{display:none;}
    .input-validation-error{border:1px solid #f00;background-color:#fee;}
    .validation-summary-errors{font-weight:bold;color:#f00;}
    .validation-summary-valid{display:none;}

    再RSVP页面引用改样式

    <link rel="stylesheet" type="text/css" href="~/Content/Styles.css" />

    这个样式仅仅是给验证信息提示时更加显眼一些,下面使用bootstrap库文件来修饰界面,可以在网站上直接下载改文件,也可使用NuGet来下载,它有一个特性是可以管理各个包之间的依赖项。


    添加样式后index界面:

    <head>
        <meta name="viewport" content="width=device-width" />
        <link href="~/Content/bootstrap.css"rel="stylesheet"/>
        <link href="~/Content/bootstrap-theme.css"rel="stylesheet"/>
        <style>
            .btn a{color:white;text-decoration:none}
            body{background-color:#F1F1F1;}
        </style>
        <title>Index</title>
    </head>
    <body>
        <div class="text-center"> 
            @ViewBag.Greeting (from the view)
            <h2>We're going to have an exciting party.<br />
            (To do:sell it better.Add pictures or something)</h2>
            <div class="btn btn-success">       
                @Html.ActionLink("RSVP Now", "RsvpForm")
            </div>
        </div>

    </body>

    Rsvp界面:

    <head>
        <meta name="viewport" content="width=device-width" />
        <link rel="stylesheet" type="text/css" href="~/Content/CSS/Styles.css" />
        <link href="~/Content/bootstrap.css" rel="stylesheet" />
        <link href="~/Content/bootstrap-theme.css" rel="stylesheet" />
        <title>RsvpForm</title>
    </head>
    <body>
        <div class="panel panel-success">
            <div class="panel panel-heading text-center"><h4>RSVP</h4></div>
            <div class="panel-body text-center">
                @using (Html.BeginForm())//Razor表达式
                {//s使用HTML辅助器从@model中读取所需信息
                    @Html.ValidationSummary()//返回验证消息的未排序列表
                    <div class="form-group">
                        <label>姓名:</label>@Html.TextBoxFor(x => x.Name, new { @class = "formcontrol" })
                    </div>
                    <div class="form-group">
                        <label>邮箱:</label>@Html.TextBoxFor(x => x.Email, new { @class = "formcontrol" })
                    </div>
                    <div class="form-group">
                        <label>电话:</label>@Html.TextBoxFor(x => x.Phone, new { @class = "formcontrol" })
                    </div>
                    <div class="form-group">
                        <label>意愿:</label>@Html.DropDownListFor(x => x.WillAttend, new[] {
                            new SelectListItem() {Text = "Yes,I'll be there",Value = bool.TrueString },
                            new SelectListItem() {Text = "No,I can't come",Value = bool.FalseString }
                            }, "选择一个", new { @class = "formcontrol" })
                    </div>
                    <div class="text-center">
                        <input class="btn btn-success" type="submit" value="Submit RSVP" />
                    </div>
                }
            </div>
        </div>

    </body>

    Thanks界面:

    <head>
        <meta name="viewport" content="width=device-width" />
        <link href="~/Content/bootstrap.css" rel="stylesheet" />
        <link href="~/Content/bootstrap-theme.css" rel="stylesheet" />
        <style>
            body {
                background-color: #F1F1F1;
            }
        </style>
        <title>Thanks</title>
    </head>
    <body>
        <div class="text-center">
            <h1>Thank you, @Model.Name!</h1>
            <div class="lead">
                @if (Model.WillAttend == true)
                {
                    @:It's great that you're coming.The drinks are already in the fridge!
                }
                else
                {
                    @:Sorry to hear that you can't make it, but thanks for letting us know.
                 }
            </div>
        </div>
    </body>

    展开全文
  • ASP.NET MVC 4 开发指南》是由台湾知名博客站长与畅销书作者“Will保哥”所撰写的ASP.NETMVC4开发指南,融入作者多年实务开发工作之精髓,从基础观念、技术讲解、开发实例、开发技巧到安装部署,都将以深入浅出的...
  • [Packt Publishing] ASP.NET MVC 2 开发经典实例 (英文版) [Packt Publishing] ASP.NET MVC 2 Cookbook (E-Book) ☆ 图书概要:☆ Written in cookbook style, this book offers solutions to all common web ...
  • ASP.NET MVC开发实例

    千次阅读 2011-04-19 11:21:00
    选择相关开发语言,创建一个 ASP.NET MVC Web Application 项目,选择不需要单元测试,这样生成了一个MVC框架,按Ctrl+F5运行,可看到一个欢迎主页。 注意:使用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.cs

    using 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 实例

    2019-09-27 07:39:43
    MVC架构已深得人心,微软也不甘落后,推出了Asp.net MVC,并在vs2010中已经内置了MVC的相关功能。...选择相关开发语言,创建一个 ASP.NET MVC Web Application 项目,选择不需要单元测试,这样生成了一个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文件夹中创建一个类,代码如下:

     

    ContractedBlock.gif ExpandedBlockStart.gif 代码
    
       
    // Test.cs

    using 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,输入如下代码:

     

    ContractedBlock.gif ExpandedBlockStart.gif 代码
    
       
    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,并将代码做些修改,以访问模块:

     

    ContractedBlock.gif ExpandedBlockStart.gif 代码
    
       
    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”,作出如下图的选择:

     2010081312061949.jpg

    即在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的代码:

     

    ContractedBlock.gif ExpandedBlockStart.gif 代码
    
       
    <% @ 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运行,在主页上点击“测试”,即可体验增删查改的功能。

    转载于:https://www.cnblogs.com/chrischen662/archive/2010/08/13/1798876.html

    展开全文
  • ASP.NET MVC 4 开发指南》是由台湾知名博客站长与畅销书作者“Will保哥”所撰写的ASP.NETMVC4开发指南,融入作者多年实务开发工作之精髓,从基础观念、技术讲解、开发实例、开发技巧到安装部署,都将以深入浅出的...
  • ASP.NET MVC项目实例

    2011-08-26 11:35:52
    ASP.NET MVC作为微软官方的.NET平台下MVC解决方案,自诞生起就吸引了众多.NET平台开发人员的眼球。ASP.NET MVC从一开始的设计思路就与Struts不同,它的映射是利用路由配置而非xml,从而大大降低了开发复杂度,并且比...
  • 解析ASP.NET Mvc开发之查询数据实例

    万次阅读 2014-01-02 01:27:07
    对于.NET平台上开发WebForm项目,程序员操作数据的方法主要是通过使用ADO.NET。而我们MVC操作数据库呢? 与ADO.NET相比又有怎样的优势呢? 一,大家都在谈的EF到底是什么? EF ,全称Entity FramWork。也就是所谓...
  • Asp.Net MVC案例教程

    2010-06-17 18:11:57
    Asp.Net MVC案例教程 Asp.Net MVC案例教程 Asp.Net MVC案例教程 Asp.Net MVC案例教程 Asp.Net MVC案例教程 Asp.Net MVC案例教程
  • 微信支付接口V3.3.7 asp.net mvc实例

    热门讨论 2014-12-04 16:31:35
    VS 2013 C# asp.net mvc 写的,基本的接口都测试过了. 分享给大家. 其中有一个商户号的字段,对应邮件中是 machId,请开发人员注意了, 不要搞错. JS 方式付款不需要证书,但退款需要证书.需要在服务器上安装一下. 有...
  • ASP.NET 开发课程 MVC5 入门篇

    万人学习 2017-03-05 20:10:04
    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,503
精华内容 6,601
关键字:

asp.netmvc开发实例