[翻译:ASP.NET MVC 教程]创建一个动作
本教程的目标是向你解释怎样创建一个新的控制器动作。你将了解到控制器方法的需求。你也将了解到怎样防止一个方法被公开为控制器动作。
添加一个动作至控制器
通过向控制器添加一个新方法,你就向控制器添加了一个新的动作。例如,清单1中的控制器包含一个名为Index()的动作和一个名为SayHello()的动作。两个方法都公开为控制器。
清单1——Controllers\HomeController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public string SayHello()
{
return "Hello!";
}
}
}
为了将一个方法公开为一个控制器,它必须满足特定的需求:
· 该方法必须为一个公有方法。
· 该方法不能为一个静态方法。
· 该方法不能为一个扩展方法。
· 该方法不能为一个构造器(constructor),取值器(getter),或是设值器(setter)。
· 该方法不能有公开的集合类型。
· 该方法不能是控制器基类的一个方法。
· 该方法不能包含引用(ref)或输出(out)参数。
注意到控制器动作的返回类型是没有限制的。一个控制器动作能返回字符串类型、日期时间类型、Random类的一个实例或者是空值。ASP.NET MVC框架将会把任何一个不是动作结果类型的其他类型转换为字符串类型,然后将其呈现在浏览器中。
当你添加任何一个不违反这些需求的方法到控制器中,该方法将会被公开为控制器动作。这里应当小心。控制器方法能被任何接入因特网的人所请求。因此,决不能创建一个例如DeleteMyWebsite()的控制器动作。
防止一个公有方法被请求
如果你想要在控制器类中创建一个公有方法,并且你不想将其作为控制器动作而公开,那么你可以通过使用[NonAction]属性来防止该方法被请求。例如,清单2中的控制器包含了一个由[NonAction]属性修饰的名为CompanySecrets()公有方法。
清单2——Controllers\WorkController.cs
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
public class WorkController : Controller
{
[NonAction]
public string CompanySecrets()
{
return "This information is secret.";
}
}
}
如果你企图通过键入/Work/CompanySecrets到浏览器地址栏中来请求CompanySecrets()控制器动作,那么你将得到图1所示的错误信息。
图1:请求一个NonAction方法
文章出处:Kinglee’s Blog (http://www.cnblogs.com/Kinglee/)
版权声明:本文的版权归作者与博客园共有。转载时须注明本文的详细链接,否则作者将保留追究其法律责任。