5. 控制器和Action方法

控制器和Action方法

原文:http://quickstarts.asp.net/3-5-extensions/mvc/MVCControllerActions.aspx

1. 介绍
控制器的职责:定位并执行Action方法,并确保它能正确执行;获取Action方法所需的参数并传递给它;捕获Action方法执行期间出现的错误;提供“WebFormViewFactory”类以便生成ASP.NET页面类型的视图。

一个简单的示例:
namespace MvcApplication.Controllers
{
public class HomeController : Controller
{
public void Index()
{
RenderView("Index");
}

public void About()
{
ViewData["CompanyName"] = "Contoso";
RenderView("About");
}
}
}
2. Action方法
MVC框架默认认为所有public方法都是Action方法。若不想让某个public方法成为Action方法,应该对其使用“NonActionAttribute”属性标记。

3. Action方法的参数
默认地,Action方法的参数是一组键值对,它们来自Form表单、查询字符串和cookie。
控制器基类Controller负责把来自表单数据和RouteData实例的参数传给Action方法。当参数值无法解析时,若参数时引用或Nullable类型,则传递null给它,否则则抛出异常。
为了直接存取URL中的数据,控制器提供了Request和Response类,他们的语义对应于
HttpRequestHttpResponse。下面是一个简单的例子:
public void Detail()
{
int id = Convert.ToInt32(Request["id"]);
}
4. 自动映射Action方法的参数
当HTTP请求中包含与Action方法的参数名字相同的参数时,该参数的值将被自动传递给Action方法。另外,MVC框架同样支持可选参数,当Action方法的参数为nullable类型,且为传递给此参数任何值时,控制器将传递null给此参数。下面是一个示例:
public void ShowArticles(DateTime date)
{
if(!date.HasValue)
{
date = DateTime.Now;
}
// ...
}
5. 处理未知Action
当控制器处理一个未知的Action时,它将抛出HandleUnknownAction异常,控制器默认的处理方式是返回HTTP 404错误。另外,可以通过重写“HandleUnknownError”方法实现自定义的错误处理。下面是一个例子:
public void override HandleUnknownError(string action) {
// Redirect to a search page where the unknown action is
// the search query. Determine when to show the search page
// based on the result of calling a ShouldShowSearch() method.
if (ShouldShowSearch(action) == true)
{
RedirectToAction("search", action );
return;
}
base.HandleUnknownError(action);
}
posted on 2008-05-06 16:57  Na57  阅读(1013)  评论(0编辑  收藏  举报