Asp.Net MVC---Walkthrough
2008-05-30 01:05 by Jun1st, 1881 visits, 收藏, 编辑Asp.Net MVC---Walkthrough
在上一篇关于Asp.Net MVC的文章中,对Asp.Net MVC作了一个High level的介绍,有兴趣的园友可以看一下这里。概念性的东西讲完了,现在该是动手写点Code的时候了,用原版技术书上的话说就是:Time to get your hands dirty。(文章写到一半,Asp.Net MVC Preview3发布了,所以,本文的的Project也相应的更新Preview 3的了)
创建一个新项目
通过File->New Project->Asp.Net MVC Web Application创建一个新项目:AjaxInMVC。创建Web Application的时候,还会创建一个Test项目,通过这个Test项目就可以实现了TDD了。创建完成的新项目的结构如图:

可以看到,生成的项目文件夹已经有了Controllers, Models和Views。此外,Views中还包括一个Shared, 这个文件夹中存放可以公共访问的页面文件等,如master文件。而在Content中,用来存放诸如javascript、stylesheet之类的文件。
URL Routing
打开Glocal.ascx文件,可以看到在Application_Start这个系统函数中注册了Asp.Net MVC的Route规则:

这是在Preview 3中的新的Routing规则,相比之Preview 2,有了两个新的方法:
l IgnoreRoute: MVC的Routing System将不会处理IgnoreRoute中的URL Pattern
l MapRoute: 把一个新的Routing规则添加到Routes Collection中,而其中的“new { controller = "Home", action = "Index", id = "" }“是此Routing的默认的Controller和Action。
这时的程序是完全可以运行的,只不过几乎什么都没有J
简单的Sample: Lunch Management
先看一下效果图吧:

HTML代码:
1

<%
@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="AjaxInMVC.Views.Home.Index" %>2

3

<%
@ Import Namespace="AjaxInMVC.Models" %>4

5
6

7
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">8

9
<h2>Here Are The Users</h2>10

11
<div class="rounded">12

13
<div class="top-outer">14

15
<div class="top-inner">16

17
<div class="top"> 18

19
</div>20

21
</div>22

23
</div>24

25
<div class="mid-outer">26

27
<div class="mid-inner">28

29
<div class="mid" id="users"> 30

31
<table>32

33
<thead>34

35
<tr>36

37
<td>No.</td>38

39
<td>Name</td>40

41
<td>Balance</td>42

43
<td>Last Lunch Date</td>44

45
<td>Register Date</td>46

47
</tr>48

49
</thead>50

51
<tbody>52

53

<%
int i = 1; %>54

55

<%
foreach (User user in (List<User>)ViewData["Users"] ) %>56

57

<%
{ %>58

59
<tr>60

61
<td><%= i++ %></td>62

63
<td><%= user.UserName %></td>64

65
<td class="money">¥<%= user.Balance %></td>66

67
<td><%= user.LastLunchDate %></td>68

69
<td><%= user.RegisterDate.ToShortDateString() %></td>70

71
</tr>72

73

<%
} %>74

75
</tbody>76

77
</table>78

79
</div>80

81
</div>82

83
</div>84

85
<div class="bottom-outer"><div class="bottom-inner"><div class="bottom"></div></div></div>86

87
</div>88

89
<div>90

91
<p>92

93
<%= Html.ActionLink<AjaxInMVC.Controllers.HomeController>(h => h.NewUser(), "New User") %>94

95
</p>96

97
</div>98

99

Asp.Net MVC使得我们又重新拿回了对页面控件的控制权,但是随之而来的一个副作用就是失去了很多在传统的Asp.net中丰富的控件。我们必须写更多的代码,但是我们拥有了更高的灵活性。
解释一下最下面那句Html.ActionLink, 它使用了.net中最新的Lamda表达式,这么做的好处是所调用的Action:NewUser,是必须要存在的,否则编译时就会出错。而这正式我们所希望的,较之于等到程序运行时才出错。
Controller主要代码:
private LunchDataContext lunchDC = new LunchDataContext();
public ActionResult Index()
{
ViewData["Users"] = lunchDC.GetAllUsers();
return View("Index");
}
到目前位置,Asp.Net MVC的每一个Release对Controller的变化都不小,Preview 2取消了作为Action需要的属性,而默认设置所有的public方法为Action。这一次,Action方法不仅有返回值ActionResult, 而且从controller到view的方法也变为了View。
LunchDataContext是一个LINQ to SQL类,并且通过partial类这一特性添加了一些简单的方法(注意:添加一个独立的类文件,而不是修改IDE生成的类文件,这就是partial的好处之一)
这个页面的功能很简单,添加、显示。但是已经基本上完成View->Controller->Model->Controller->View一个轮回了。之后将添加更多的功能,并希望能实现Ajax。
代码目前写得还是有点乱,等之后实现更多的功能和Refector之后再发了^_^。