MVC概念
MVC的含义是“模型-视图-控制器”。MVC是一个架构良好并且易于测试盒易于维护的开发模式。基于MVC模式的应用程序包含:
Models:表示该应用程序的数据并使用验证逻辑来强制实施业务规则的数据类。
Views:应用程序动态生成HTML所使用的模板文件。
Controllers:处理浏览器的请求,取得数据模型,然后指定要响应浏览器的视图模板。
本系列将覆盖所有这些概念,并告诉你如何使用他们来构建应用程序。
添加一个控制器
让我们开始创建一个控制器类。
在解决方看资源管理器里,在“Controllers”上,右击选择 新建->控制器,并输入控制器的名称“HelloWorldController”,模板保持默认的选项(“空MVC控制器”),点击添加按钮,新增的控制器类代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Mvc_Movie.Controllers
{
public class HelloWorldController : Controller
{
//
// GET: /HelloWorld/
public ActionResult Index()
{
return View();
}
}
}
修改代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Mvc_Movie.Controllers
{
public class HelloWorldController : Controller
{
public string Index()
{
return "这是我的<b>默认</b>方法";
}
public string Welcome()
{
return "这是欢迎方法";
}
}
}
在这个例子中控制器方法将返回一个字符串的HTML。本控制器被命名为HelloWorldController,代码中的第一个方法被命名为Index。让我们从浏览器中调用它。运行应用程序(按F5或者Ctrl + F5)。在浏览器的地址栏中输入路径“HelloWorld”(例如,在下面的事例:http://localhost:54454/HelloWorld)。在上面的方法中,代码直接返回了一个字符串。你告诉系统只返回一些HTML,系统确实这样做了。
根据传入的URL,ASP.NET MVC 调用不同的控制器类(和它们之中不同的操作方法)。使用ASP.NET MVC默认的URL路由逻辑格式,以确定哪些代码会被调用:
/[Controller]/[ActionName]/[Parameters]
URL的第一部分确定哪个控制器类会被执行。因此/HelloWorld映射到HelloWorldController控制器类。
URL的第二部分确定要执行控制器类中的哪个操作方法。因此/HelloWorld/Index,会使得HelloWorldController控制器类的Index方法被执行。请注意,我们只需要浏览/HelloWorld路径,默认情况下会调用Index方法。如果没有明确的指定操作方法,控制器类默认调用Index方法。
浏览http://localhost:54454/HelloWorld/Welcome。Welcome方法会被执行并返回字符串:“这是欢迎方法”。默认的MVC映射为 默认的MVC映射为/[Controller]/[ActionName]/[Parameters] ,对于这个URL,控制器类是HelloWorld,操作方法是Welcome,您还没有使用过URL的[Parameters] 部分。
让我们稍微修改一下这个例子,以便可以使用URL传递一些参数信息给控制器类(例如, /HelloWorld/Welcome?name=Tom&num=4)。改变您的Welcome 方法来包含两个参数,如下所示。需要注意的是,示例代码使用了C#语言的可选参数功能,num参数在不传值时,默认值为1。
public string Welcome(string name,int num=1)
{
return "你好," + name + "," + num + "次";
}
运行您的应用程序并浏览此URL(http://localhost:54454/HelloWorld/Welcome?name=Tom&num=4),得到结果为“你好,Tom,4次”。你可以对参数name 和num 尝试不同的值。 ASP.NET MVC 模型绑定机制 会自动将地址栏中URL里的 查询字符串映射到您方法中的参数。
学习到这里,善于思考的你可能会做以下尝试
public string Welcome(string name)
{
return "你好," + name ;
}
在浏览器中输入:http://localhost:54454/HelloWorld/Welcome/Tom,结果发现输出为“你好,”,并没有输出期望的“你好,Tom”。
不是/[Controller]/[ActionName]/[Parameters]吗?此处为什么无法获取url中传入的参数呢?此处跟路由约定有关,默认情况下,参数标识符为ID,方能正确传入,如下所示修改
public string Welcome(int ID)
{
return "ID:" + ID;
}
在这两个例子中,控制器一直在做着MVC中“VC”部分的职能, 也就是视图和控制器的工作。该控制器直接返回HTML内容。通常情况下,您不会让控制器直接返回HTML,因为这样代码会变得非常的繁琐。相反,我们通常会使用一个单独的视图模板文件来帮助生成返回的HTML。让我们来看看下面我们如何能做到这一点吧。