波斯马BOSSMA Information Technology

ASP.NET MVC实战体验之项目管理系统(5)

发布时间:2010年4月1日 / 分类:ASP.NET MVC / 8,059 次浏览 / 评论

这一节将介绍MVC中的View,包含:如何创建View,传输数据从Controller到View,在View中使用HTML Helpers生成内容。

1、理解View?????

在ASP.NET MVC应用程序中,浏览器地址栏中输入的URL地址在硬盘中没有一个实际的页面对应,对应的是一个View。在ASP.NET MVC应用中,传入浏览器的请求映射到Controller的一个action,大部分时候action返回一个view,也可能执行一个跳转操作,转向到另一个action。

看一个Controller:

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
??? [HandleError]
??? public class HomeController : Controller
??? {
??????? public ActionResult Index()
??????? {
??????????? return View();
??????? }

??????? public ActionResult Details()
??????? {
??????????? return RedirectToAction("Index");
??????? }
??? }
}

当在浏览器地址栏中输入:/Home/Index,将会触发Index() action;输入/Home/Details/,将会触发Details() action。

Index() action返回一个View(),Details() action转向到Index() action。

在Index()中返回的View()指向服务器目录:Views\Home\Index.aspx。

2、添加内容到View

一个view是一个标准的(X)HTML文档,这个文档可以包含脚本,脚本用于添加内容到View中。

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
??? <title>Index</title>
</head>
<body>
??? <div>

??? The current date and time is
??? <% Response.Write(DateTime.Now);%>

??? </div>
</body>
</html>

动态脚本包含在<%%>中,这种写法在asp中很常见,可以使用=代替Response.Write。

3、使用HTML Helpers生成View的内容

HTML Helper可以方便的用来生成View中的内容,包括文本、输入框、下拉框等。例如:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
??? <title>Login Form</title>
</head>
<body>
??? <div>

??? <% using (Html.BeginForm())
?????? { %>

??????? <label for="UserName">User Name:</label>
??????? <br />
??????? <%= Html.TextBox("UserName") %>

??????? <br /><br />

??????? <label for="Password">Password:</label>
??????? <br />
??????? <%= Html.Password("Password") %>

??????? <br /><br />

??????? <input type="submit" value="Log in" />???????

??? <% } %>

??? </div>
</body>
</html>

使用了BeginForm(), TextBox() 和Password() 用来生成form、输入框、密码框等。当然可以完全不使用Html Helpers,例如:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index4.aspx.cs" Inherits="MvcApp.Views.Home.Index4" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
??? <title>Login Form without Help</title>
</head>
<body>
??? <div>

??? <form method="post" action="/Home/Login">

??? <label for="userName">User Name:</label>
??? <br />
??? <input name="userName" />

??? <br /><br />

??? <label for="password">Password:</label>
??? <br />
??? <input name="password" type="password" />

??? <br /><br />
??? <input type="submit" value="Log In" />

??? </form>

??? </div>
</body>
</html>

如果有兴趣还可以自己定义Html Helpers,拓展更多的输出样式。

4、使用View Data传递数据给View

view data就像邮寄一个包裹,所有的数据从controller传送到View,必须使用view data。

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
??? public class ProductController : Controller
??? {
??????? public ActionResult Index()
??????? {
??????????? ViewData["message"] = "Hello World!";
??????????? return View();
??????? }

??? }
}

ViewData是一个键值对的集合,当Index()返回View()时,view data自动传送到view。

在输出ViewData中的数据时,可以使用:

<%= Html.Encode(ViewData[“message”]) %>
Html.EnCode将会编码特殊的字符,如:< >,可以防止javascript攻击等,建议总是使用。

OK,这节到这里结束了。

点击这里下载源代码

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自波斯马,原文地址《ASP.NET MVC实战体验之项目管理系统(5)

关键字:

建议订阅本站,及时阅读最新文章!
【上一篇】 【下一篇】

发表评论