摘要
1using System;
2using System.Collections.Generic; 3using System.Linq; 4using System.Web; 5using System.Web.Mvc; 6using System.Web.Mvc.Ajax; 7using MVCDemo.Models; 8using MVCDemo.Models.Interfaces; 9using MVCDemo.Models.Entities; 10 11namespace MVCDemo.Controllers 12{ 13 public class AnnounceController : Controller 14 { 15 public ActionResult Release() 16 { 17 ICategoryService cServ = ServiceBuilder.BuildCategoryService(); 18 List<CategoryInfo> categories = cServ.GetAll(); 19 ViewData["Categories"] = new SelectList(categories, "ID", "Name"); 20 return View("Release"); 21 } 22 } 23}
1<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Release.aspx.cs" Inherits="MVCDemo.Views.Announce.Release" %>
2<%@ Import Namespace="MVCDemo.Models.Entities" %> 3 4<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www./TR/xhtml1/DTD/xhtml1-transitional.dtd"> 5 6<html xmlns="http://www./1999/xhtml" > 7<head runat="server"> 8 <title></title> 9</head> 10<body> 11 <% SelectList categories = ViewData["Categories"] as SelectList; %> 12 <div> 13 <h1>MVC公告发布系统——发布公告</h1> 14 <% Html.BeginForm("DoRelease","Announce",FormMethod.Post); %> 15 <dl> 16 <dt>标题:</dt> 17 <dd><%= Html.TextBox("Title") %></dd> 18 <dt>分类:</dt> 19 <dd><%= Html.DropDownList("Category",categories) %></dd> 20 <dt>内容:</dt> 21 <dd><%= Html.TextArea("Content") %></dd> 22 </dl> 23 <input type="submit" value="发布" /> 24 <% Html.EndForm(); %> 25 </div> 26</body> 27</html>
处理请求
现在我们可以输入信息了,但是如果你输入后点提交,你会发现产生了经典的404错误。刚才我们说了,表单提交到的Action是Announce下的DoRelease,但是现在没有这个Action,当然会404了。下面,我们来建立这个处理程序。 回到AnnounceController,新建Action方法DoRelease,具体代码如下。 AnnounceController.cs:
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Web; 5using System.Web.Mvc; 6using System.Web.Mvc.Ajax; 7using MVCDemo.Models; 8using MVCDemo.Models.Interfaces; 9using MVCDemo.Models.Entities; 10 11namespace MVCDemo.Controllers 12{ 13 public class AnnounceController : Controller 14 { 15 public ActionResult Release() 16 { 17 ICategoryService cServ = ServiceBuilder.BuildCategoryService(); 18 List<CategoryInfo> categories = cServ.GetAll(); 19 ViewData["Categories"] = new SelectList(categories, "ID", "Name"); 20 return View("Release"); 21 } 22 23 public ActionResult DoRelease() 24 { 25 AnnounceInfo announce = new AnnounceInfo() 26 { 27 ID = 1, 28 Title = Request.Form["Title"], 29 Category = Int32.Parse(Request.Form["Category"]), 30 Content = Request.Form["Content"], 31 }; 32 33 IAnnounceService aServ = ServiceBuilder.BuildAnnounceService(); 34 aServ.Release(announce); 35 36 ViewData["Announce"] = announce; 37 return View("ReleaseSucceed"); 38 } 39 } 40} 我们看,它首先新建一个AnnounceInfo类型的实体类,用来存贮这个新的公告的信息。注意它是怎么得到表单信息的,对了,用了Request.Form["表单名"],这就是获得表单信息的一种方法,当然还有其他方法,但是我推荐这一种。注意,这里的表单名就是我们使用Html.***方法生成表单时的名字。 OK,下面就是调用业务逻辑组件,完成发布公告功能。 但是这里有个问题,我们的业务逻辑组件是Mock的,也就是说其实什么都没做啊。如果是真的业务逻辑组件,我们可以去数据库看看有没有添加公告信息成功,可是这里没有,我们要怎么证明表单数据传递过来了呢?于是我想了一个办法,有新加了一个ReleaseSucceed视图,用来显示新发布公告的信息,以此证明我们确实把表单信息传过来了。ReleaseSucceed视图如下: ReleaseSucceed.aspx:
1<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ReleaseSucceed.aspx.cs" Inherits="MVCDemo.Views.Announce.ReleaseSucceed" %> 2<%@ Import Namespace="MVCDemo.Models.Entities" %> 3 4<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www./TR/xhtml1/DTD/xhtml1-transitional.dtd"> 5 6<html xmlns="http://www./1999/xhtml" > 7<head runat="server"> 8 <title></title> 9</head> 10<body> 11 <% AnnounceInfo announce = ViewData["Announce"] as AnnounceInfo; %> 12 <div> 13 <h1>MVC公告发布系统——发布公告成功</h1> 14 <dl> 15 <dt>ID:</dt> 16 <dd><%= announce.ID %></dd> 17 <dt>标题:</dt> 18 <dd><%= announce.Title %></dd> 19 <dt>类别ID:</dt> 20 <dd><%= announce.Category %></dd> 21 <dt>内容:</dt> 22 <dd><%= announce.Content %></dd> 23 </dl> 24 </div> 25</body> 26</html> 这些代码就不用我过多解释了。下面,我们输入一些信息,提交看看: 看到没有,我没有骗你们,表单数据真的传过来了!^_^||| 小结 通过这四篇文章,我们已经了解了ASP.NET MVC的基本原理,并且已经会呈现数据页面及传递表单数据处理了。会了这些,其实已经可以应付绝大多数主要开发了。从下篇开始,我们接触一些高级点的内容。下篇将说一下ASP.NET MVC如何与ASP.NET AJAX及JQuery结合,再后面,会讲到拦截器及与Silverlight结合的内容。 |
|