ASP.NET MVC Framework体验(1):从一个简单实例开始

概述

1210微软发布了ASP.NET 3.5扩展的预览版,在其中包括了ASP.NET MVC FrameworkASP.NET AJAX改进、ASP.NET动态数据支持、ASP.NET SIlverlight支持、以及ADO.NET Data Services等。我也在第一时间下载下来进行了安装,体验了一下微软的ASP.NET MVC Framework

提起MVC,相信大家都不陌生了,这里简单的提两句,将一个应用的实现分成三部分:模型(Model)、视图(View)、控制器(Controller)。模型用来保持状态,视图只负责信息的显示,控制器用户处理和回应用户的输入和交互。本文就通过一个简单的实例来体验一下ASP.NET MVC Framework

安装

1.需要安装VS2008 RTM或者Visual Web Developer 2008 Express

2.下载安装ASP.NET 3.5 Extensions。下载地址:http://asp.net/downloads/3.5-extensions

创建MVC应用程序

安装完成后,会在新建网站里面看到ASP.NET 3.5 Extensions Web Sites一项(我用的是Visual Web Developer 2008 Express):


建立完成后,站点的结构与普通的Web Site并没有不同(在VS 2008 RTM下不知道是什么样的),只不过在Web.config中添加了一些配置,如添加了UrlRoutingModule

<add name="UrlRoutingModule" type="System.Web.Mvc.UrlRoutingModule,

      System.Web.Extensions, Version=3.6.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

建立数据模型对象(Model

App_Code文件夹下,建立一个Models文件夹,添加一个LINQ to SQL Classes


命名ProductProductInfo

建立控制器(Controller

App_Code文件夹下,建立Controllers文件夹,并添加ProductController.cs,编写代码如下:

public class ProductController : Controller

{

    [ControllerAction]

    public void Index()

    {

        MSPetShopDataContext db = new MSPetShopDataContext();

        ProductInfo productinfo = db.ProductInfos.Single(p => p.ProductId == "BD-03"); 

 

        RenderView("Product", productinfo);

    }

}

这里创建了一个名为IndexAction,查询产品信息。并调用RenderView方法,第一个参数Product指定要显示的视图名,第二个参数是传递给视图的数据。

建立视图(View

在站点下添加Views文件夹,并添加Product.aspx,使其不再继承于Page,而继承于泛型的ViewPage

public partial class Product_Product : ViewPage<ProductInfo>

{

    protected void Page_Load(object sender, EventArgs e)

    {

 

    }

}

显示数据,在ASPX中编写:

<div>

    <h2>ProductDetail:</h2>

    ProductId<%= ViewData.ProductId %><br /><br />

    Name<%= ViewData.Name %><br /><br />

    Descn<%= ViewData.Descn %>

</div>

这里也可以使用服务器控件进行数据的显示,后面再说。

配置路径选择(Route

最后一步,需要在Global.asax中配置路径选择,在Application_Start中编写:

void Application_Start(object sender, EventArgs e)

{

    // Code that runs on application startup

    RouteTable.Routes.Add(

        new Route

        {

            Url = "[controller]/[action].mvc",

            Defaults = new { action = "Index"},

            RouteHandler = typeof(MvcRouteHandler)

        }

        );

}

这里配置的路径相当于访问时的示例路径为Product/Index.mvc,如果如下配置:

void Application_Start(object sender, EventArgs e)

{

    // Code that runs on application startup

    RouteTable.Routes.Add(

        new Route

        {

            Url = "[controller]/[action]",

            Defaults = new { action = "Index"},

            RouteHandler = typeof(MvcRouteHandler)

        }

        );

}

那就等于访问的时的路径为Product/Index,不带有MVC的扩展名。

完成运行

至此,一个简单的MVC例子编写完成,运行后:

结束语

对于ASP.NET MVC Framework简单的体检就到这里了,后面有时间我会写一些复杂一点的示例,不管怎么说,ASP.NET MVC Framework为我们开发Web应用多提供了一种选择。

示例文件下载:/Files/Terrylee/MVCDemo01.rar

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
posted @ 2007-12-11 11:24 TerryLee 阅读(11376) 评论(104)  编辑 收藏 网摘 所属分类: [08]  Web开发

  回复  引用  查看    
#1楼 2007-12-11 11:30 | hxm      
看到您在CODEPLEX的SMARTCODE计划了 支持
mvc还有个mvcTOOKIT 要去SCCOT的BLOG下载 博客堂的中文翻译里有
  回复  引用    
#2楼 2007-12-11 11:31 | [心有灵犀] [未注册用户]
顶,跟着学:)
  回复  引用  查看    
#3楼 2007-12-11 11:34 | stonezhu      
这属于需要强顶的贴子
加油!!坚持!!
  回复  引用  查看    
#4楼 [楼主]2007-12-11 11:35 | TerryLee      
@hxm
我已经下载了:)
MVCToolkit还没来得及体验
  回复  引用  查看    
#5楼 [楼主]2007-12-11 11:35 | TerryLee      
@[心有灵犀]
呵呵
  回复  引用  查看    
#6楼 [楼主]2007-12-11 11:36 | TerryLee      
@stonezhu
谢谢:)
  回复  引用  查看    
#7楼 2007-12-11 12:00 | Juzz Pig(橘子&猪)      
终于出来了。也期待你写的文章。
你的几个系列都不错。支持。
  回复  引用    
#8楼 2007-12-11 12:00 | Guozhijian [未注册用户]
ASP.NET SIlverlight支持是什么?
可以在Asp.net 应用程序中使用silverlight了吗?
  回复  引用  查看    
#9楼 [楼主]2007-12-11 12:04 | TerryLee      
@Guozhijian
提供了一些Silverlight控件,可以在ASP.NET中使用,如
<asp:MediaPlayer runat="server" ID="Media1"
ScaleMode="Stretch"
AutoPlay="true"
MediaSource="MyVideoFile.wmv"
PluginBackColor="blue"
MediaSkin="Professional"
Height="240"
Width="320" />
  回复  引用  查看    
#10楼 [楼主]2007-12-11 12:05 | TerryLee      
@Juzz Pig(橘子&amp;猪)
:)
  回复  引用  查看    
#11楼 2007-12-11 12:13 | 高海东      
您好 我非常关注您的Web Client Software Factory和Web Service Software Factory,请问这两个系列您写完了吗 Web Service Software Factory 可以单独写一些吗
  回复  引用  查看    
#12楼 [楼主]2007-12-11 12:16 | TerryLee      
@高海东
还没有,Web Client Software Factory对于Composite Web Application Block和V-P模式的使用,看前面四篇应该够了,后面我会写一些Page Flow Application Block的东西。

Web Service Software Factory需要过一段时间,时间实在太少了:)
  回复  引用  查看    
#13楼 2007-12-11 12:46 | 坐断东南 笑煞之!!      
TerryLee的文章总能第一时间来做我们领路人。。

TerryLee----MS学习者的领路人

呵呵,,支持个。。
  回复  引用  查看    
#14楼 2007-12-11 12:55 | 李永京      
MS学习者的领路人。学习MVC的好文~期待!
  回复  引用    
#15楼 2007-12-11 12:55 | 黄色期刊 [未注册用户]
MonoRails怎么办???
  回复  引用  查看    
#16楼 2007-12-11 13:06 | lovecherry      
初看了一下,有几个问题:
1、如果使用了模板页,页面标题如何绑定?
2、模板页的视图数据由谁来提供?
  回复  引用  查看    
#17楼 [楼主]2007-12-11 13:15 | TerryLee      
@坐断东南 笑煞之!!
呵呵,过奖了
  回复  引用  查看    
#18楼 [楼主]2007-12-11 13:16 | TerryLee      
@李永京
:)
  回复  引用  查看    
#19楼 [楼主]2007-12-11 13:29 | TerryLee      
@XX期刊
关于MonoRails何去何从,可以参看这篇文章:
http://www.infoq.com/news/2007/11/mr-ms-mvc
  回复  引用  查看    
#20楼 2007-12-11 13:30 | terry_12      
@lovecherry
titile可以在模板页属性中指定,
模板页数据由controller提供
  回复  引用  查看    
#21楼 [楼主]2007-12-11 13:35 | TerryLee      
@lovecherry
在MVC框架下,仍然可以使用母版页。

不过母版页的视图数据如何传,还没有看到相关的内容
-------------------------------------------------
Terry-12:
void RenderView(string viewName, string masterName, object viewData)

  回复  引用  查看    
#22楼 2007-12-11 13:35 | 没剑      
true bird~~
  回复  引用    
#23楼 2007-12-11 13:37 | 东 [未注册用户]
多谢分享.
  回复  引用  查看    
#24楼 [楼主]2007-12-11 13:38 | TerryLee      
@terry_12
视图数据由Controller提供是肯定的。

  回复  引用  查看    
#25楼 [楼主]2007-12-11 13:39 | TerryLee      
@东
:)
  回复  引用  查看    
#26楼 2007-12-11 13:40 | terry_12      
@TerryLee
void RenderView(string viewName, string masterName, object viewData);
  回复  引用  查看    
#27楼 2007-12-11 13:40 | lovecherry      
@terry_12
如果title是要根据URL中的参数来指定比如[catgoryID],又不想从视图数据中获取怎么办?
控制器只能渲染普通页面,如果是用户控件,由页面来加载用户控件,但是现在只有Html.RenderUserControl而没有Html.RenderMasterPage,怎么把视图数据传给模板页呢?

说实话,MVC除了强制性从控制器走请求来消除页面cs代码,其它我没有看到什么更多的好处。页面里面还会有一堆Html、Url之类的Helper方法。。。。
  回复  引用  查看    
#28楼 [楼主]2007-12-11 13:45 | TerryLee      
@terry_12
晚上回去看一下
  回复  引用    
#29楼 2007-12-11 14:12 | Eeyore [未注册用户]
要引用System.Web.Mvc命名空间...
  回复  引用  查看    
#30楼 [楼主]2007-12-11 14:16 | TerryLee      
@Eeyore
这个当然得引用了啊:)
  回复  引用  查看    
#31楼 2007-12-11 14:24 | volnet(可以叫我大V)      
MonoRail……
对了,问一下,你的博客是用什么写的?word2007?

  回复  引用    
#32楼 2007-12-11 14:26 | riancy [未注册用户]
不管是什么框架,我只关心项目运行的性能,
能说说这样的优势除了在开发上,还有哪里有优势?
  回复  引用  查看    
#33楼 [楼主]2007-12-11 14:35 | TerryLee      
@volnet(可以叫我大V)
用Windows Live Writer写的:)

http://www.cnblogs.com/dudu/articles/495718.html
  回复  引用  查看    
#34楼 [楼主]2007-12-11 14:41 | TerryLee      
@riancy
现在还不能说MVC与WebForm孰优孰劣,可以说MVC框架有点像回到了ASP的风格,只不过现在提供了一种更为严格的做法来将这种开发方式和代码逻辑区分开来。

可以参考一下《Why MVC for ASP.NET? 》这篇文章
http://www.infoq.com/news/2007/12/MVC-vs-Web-Forms
  回复  引用    
#35楼 2007-12-11 14:49 | Eeyore [未注册用户]
为什么我运行出错了...-_-#!,未将对象引用设置到对象的实例。
能提供源码下载吗?
  回复  引用  查看    
#36楼 [楼主]2007-12-11 15:17 | TerryLee      
@Eeyore
我晚上回去发一下源码吧

看一下你在Global.asax中的路径选择是否正确,Controller名为XXXController...

Url = "[controller]/[action].mvc",

  回复  引用  查看    
#37楼 2007-12-11 15:23 | Yoshow      
上次想试下这个mvc,搞了半天. 终于发现System.Web.Extensions 版本是 3.6.0.0 我的机子上没有 今天终于盼来了 ^_^
  回复  引用    
#39楼 2007-12-11 16:54 | Andy@CHY [未注册用户]
樓主可比暴雪啊,不出則已,一出必出經典啊!
頂!!
  回复  引用    
#40楼 2007-12-11 17:08 | Eeyore [未注册用户]
哈,终于可以了,但怎样通过虚拟目录访问呢?
  回复  引用  查看    
#41楼 [楼主]2007-12-11 18:25 | TerryLee      
@Yoshow
:)
  回复  引用  查看    
#42楼 [楼主]2007-12-11 18:25 | TerryLee      
@jjx
怎么打不开呢?
  回复  引用  查看    
#43楼 [楼主]2007-12-11 18:26 | TerryLee      
@Andy@CHY
呵呵,过奖了啊")
  回复  引用  查看    
#44楼 [楼主]2007-12-11 18:27 | TerryLee      
@Eeyore
通过虚拟目录访问,要视IIS而定,如果是IIS6的话,需要添加.mvc扩展,其他的应该没什么变化
  回复  引用    
#45楼 2007-12-11 18:53 | jijl2001 [未注册用户]
只能建网站吗?能不能建application
  回复  引用  查看    
#46楼 [楼主]2007-12-11 19:09 | TerryLee      
@jijl2001
可以建应用程序,我用的是Visual Web Developer 2008 Express
  回复  引用    
#47楼 2007-12-11 19:15 | je [未注册用户]
route感觉不错,其它的和monorails对比,感觉没有什么太新的东西,一般学过monorails的都能平稳过渡。障碍并不多
个人感觉
  回复  引用  查看    
#48楼 [楼主]2007-12-11 19:20 | TerryLee      
@je
也许现在还没有太多的让大家眼前一亮的东西,不知道MVC Framework最终会怎么样,还是拭目以待吧:)
  回复  引用  查看    
#49楼 2007-12-11 20:41 | 预备役中尉      
收藏学习.ERP的东西还停留在03时代.这个东西的前途如何,好象都持观望态度.
  回复  引用    
#50楼 2007-12-11 20:57 | 追求 [未注册用户]
vs2005是不是不可以用MVC 啊???高手回复下。。小弟回头看。。谢谢
  回复  引用  查看    
#51楼 2007-12-11 21:28 | jjx      
@TerryLee
可以啊,网通的, 另外浏览器编码切换成utf-8
  回复  引用  查看    
#52楼 [楼主]2007-12-11 21:29 | TerryLee      
@预备役中尉
微软的说法是将会WebForm并存,至于将来怎么发展,还得继续“观望”:)
  回复  引用  查看    
#53楼 [楼主]2007-12-11 21:30 | TerryLee      
@追求
ASP.NET MVC Framework是ASP.NET 3.5 Extensions的一部分,VS2005下不能使用
  回复  引用    
#54楼 2007-12-11 23:43 | [心有灵犀] [未注册用户]
HOHO,体验1,测试通过!!!
  回复  引用  查看    
#55楼 [楼主]2007-12-12 00:32 | TerryLee      
@[心有灵犀]
呵呵,也MVC一把吧:)
  回复  引用    
#56楼 2007-12-12 01:00 | Eeyore [未注册用户]
ha,下载源码看了一下,发现我们的是一样的:)