【翻译】ASP.NET MVC4 入门(二)添加一个Controller

原文链接:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-controller

 

MVC表示model-view-controller。MVC是一种架构良好的、可测试的、易于维护的应用开发模式,基于MVC的应用包含:

Models:代表应用中用到的数据的类,并且这些类会对数据进行逻辑验证确保符合业务规则。

Views:应用程序中动态生成HTML响应的模板文件。

Controllers:处理传入的浏览器请求,检索model中的数据,然后选择特定的view模板返回给浏览器。

在这个入门系列里将会涉及到上面提到的所有概念,并且会告诉你如何使用它们来生成一个应用程序。

让我们从创建一个controller开始,在Solution Explorer(解决方案资源管理器)中,在Controllers文件夹上右键单击,然后选择Add Controller。

image

把新建的controller命名为“HelloWorldController”。使用默认的Empty MVC Controller模板,单击Add。

image

注意在Solution Explorer中会增加一个名为HelloWorldController.cs的类文件。

image

使用下面的代码替换掉原有的内容。

复制代码
using System.Web;
using System.Web.Mvc; 
 
namespace MvcMovie.Controllers 
{ 
    public class HelloWorldController : Controller 
    { 
        // 
        // GET: /HelloWorld/ 
 
        public string Index() 
        { 
            return "This is my <b>default</b> action..."; 
        } 
 
        // 
        // GET: /HelloWorld/Welcome/ 
 
        public string Welcome() 
        { 
            return "This is the Welcome action method..."; 
        } 
    } 
}
复制代码

controller中的方法会返回HTML字符串。HelloWorldController中的第一个方法被命名为Index。让我们启动浏览器来看一下效果(按下F5或者Ctrl+F5)。在浏览器中,将“HelloWorld”添加到地址栏中内容的后面(例如下面截图中,地址栏中的内容是http://localhost:9217/HelloWorld),浏览器会呈现出下面截图里的内容。在HelloWorldController中的方法只是直接返回了字符串,你告诉系统返回一些HTML,确实是这样。

image

ASP.NET MVC根据传入的URL调用不同的controller(同样调用controller中不同的方法)。ASP.NET MVC使用的默认URL路由机制使用如下格式的URL来确定哪些代码会被调用:

/[Controller]/[ActionName]/[Parameters]

URL的第一部分决定了调用哪个controller。所以/HelloWorld映射到了HelloWorldController类。URL的第二部分决定了该类中的哪个方法被调用,所以/HelloWorld/Index将会导致HelloWorldController类中的Index方法被调用。需要注意的一点是我们在浏览器地址栏的URL里只有/HelloWorld,但是Index方法也被执行了,这是因为如果不显示指定ActionName的话,会默认调用controller中的Index方法。

让我们在地址栏中输入http://localhost:9217/HelloWorld/Welcome(注意端口号会不同)。Welcome方法会执行并且返回字符串"This is the Welcome action method"。默认的MVC映射是 /[Comtroller]/[ActionName]/[Parameters]。对于这个URL,controller是HelloWorld,action是Welcome,到目前为止还没有用到[Parameters].

image

为了能够使用URL给controller传递一些参数信息,让我们来稍微修改一下示例代码(例如下面的URL,/HelloWorld/Welcome?name=Scott&numtimes=4)。更改Welcome方法使其接收两个参数,注意下面的C#代码里使用到了缺省参数的特性,这样如果没有为numTImes传值的话该参数默认取值为1。

public string Welcome(string name, int numTimes = 1)
{
    return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes);
}

重新启动程序在浏览器地址栏里输入类似于这样的URLhttp://localhost:9217/HelloWorld/Welcome?name=king.cs&numtimes=3,当然你可以为name和numtimes指定不同的值,ASP.NET MVC model binding system(Asp.net模型绑定系统)会自动将地址栏url里的查询字符串里的参数映射到调用方法对应的参数。

image

这个示例里的controller已经处理了MVC中的“VC”部分——controller和view是如何工作的。controller直接返回了HTML字符串。当然一般来说我们不会直接让controller返回HTML字符串,这样的话会让代码变得很糟糕。我们通常会使用一个独立的view模板文件来创建要返回的HTML,我们会在下一篇文章中展示如何这样做。

posted @   Lukexywang  阅读(2501)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示