MVC是模型-视图-控制器。MVC是开发,架构良好的应用模式,可测性和易于维护。
基于MVC模式的应用程序包含:
模型:类来表示应用程序的数据,并使用验证逻辑来执行该数据的业务规则。观点:模板文件,你的应用程序使用动态生成HTML响应。
控制器:类来处理传入的浏览器请求,检索模型数据,然后指定返回对浏览器的响应的视图模板。
我们将在本教程系列中覆盖所有这些概念,并向您展示如何使用它们来构建应用程序。
让我们开始创建一个控制器类。在“解决方案资源管理器”中,右键单击“控制器”文件夹,然后单击“添加”,然后单击“控制器”按钮。
在“添加材料”对话框中,单击“MVC 5控制器-空,然后单击“添加”。
命名您的新控制器“HelloWorldController”并单击“添加”。
注意在解决方案资源管理器中,一个新的文件已经创建命名helloworldcontroller.cs和一个新的文件夹视图\ HelloWorld。该控制器是在IDE中打开。
用下面的代码替换文件的内容。
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...";
}
}
}
控制器的方法将返回一个字符串的HTML为例。控制器命名HelloWorldController和第一个方法叫指数。让我们从浏览器中调用它。运行应用程序(按F5或Ctrl + F5)。在浏览器中,将“在地址栏的路径HelloWorld”。(例如,在下面的插图,它的HTTP:/ /本地:1234 / HelloWorld。)在浏览器页面会看起来像下面的截图。在上面的方法中,代码直接返回了一个字符串。你告诉系统返回一些HTML,它做到了!
ASP.NET MVC调用不同的控制器类(和不同的动作方法在其中)根据输入的URL。默认URL路由逻辑ASP.NET MVC使用使用这样的格式来确定什么样的代码来调用:
/[Controller]/[ActionName]/[Parameters]
你在App_Start/RouteConfig.cs文件路由设置格式。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
当您运行应用程序,不提供任何的网址段,它默认为“家庭”控制器和“索引”的行动方法中指定的默认段的代码。
该地址的第一部分确定要执行的控制器类。所以/ HelloWorld地图HelloWorldController类。地址的第二部分决定要执行的类的操作方法。因此/HelloWorld/Index HelloWorldController类指数的方法来执行。注意,我们只需要浏览/ HelloWorld和索引方法默认使用。这是因为一个名为索引的方法是将在控制器上调用的默认方法,如果一个没有显式指定。的第三个部分的网址段(参数)是路由数据。在本教程中,我们将看到路由数据。
浏览http:/ /本地:XXXX / HelloWorld /欢迎。欢迎的方法运行并返回字符串“这是欢迎的动作方法……”。默认MVC映射/ [控制]、[ ]、[参数] ActionName。这个URL,该控制器是HelloWorld和欢迎的动作方法。你还没有使用[参数]的一部分的网址。
让我们修改的例子略,可以传递一些参数信息的URL的控制器(例如,/HelloWorld/Welcome?name=Scott&numtimes=4)。更改您的欢迎的方法,包括两个参数如下所示。请注意,代码采用C #可选参数特征表明numtimes参数应默认为1如果没有值传递参数。
public string Welcome(string name, int numTimes = 1) {
return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes);
}
安全注意:上面的代码使用httpserverutility.htmlencode保护应用免受恶意输入(即JavaScript)。更多信息参见如何:通过对字符串应用HTML编码在Web应用程序中防止脚本侵入。
运行应用程序,浏览到的URL例子(http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4)。你可以尝试不同的值的名称和numtimes在URL。ASP.NET的MVC模型绑定系统自动地图的命名参数从地址栏中的查询字符串,你的方法参数。
在以上示例中,URL片段(参数)是不使用的name和numtimes参数作为查询字符串传递的吗?(问号)在上面的网址是一个分隔符,查询字符串跟随。字符分隔查询字符串。
用下面的代码替换欢迎的方法:
public string Welcome(string name, int ID = 1)
{
return HttpUtility.HtmlEncode("Hello " + name + ", ID: " + ID);
}
运行应用程序并输入以下网址:
http://localhost:xxx/HelloWorld/Welcome/3?name=Rick
这一次的第三段匹配URL路线的参数id。欢迎动作方法包含一个参数(ID),匹配的URL规范在RegisterRoutes方法。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
在ASP.NET的MVC应用程序,通过参数的路由数据更典型的(像我们一样的ID以上)比作为查询字符串传递给。你也可以添加一个路由通过的姓名和numtimes参数在URL路由数据。在App_Start\RouteConfig.cs文件,添加“你好”路线:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Hello",
url: "{controller}/{action}/{name}/{id}"
);
}
}
/localhost:XXX/HelloWorld/Welcome/Scott/3
.
许多MVC应用程序,默认路由工作正常。在本教程中,您将学习到通过使用模型绑定器的数据,而您不必修改默认路由。
在这些例子中,控制器已做“VC”部分MVC就是工作的视图和控制器。该控制器直接返回HTML。通常你不需要控制器直接返回HTML,因为这样代码会变得很麻烦。相反,我们通常会使用一个单独的视图模板文件来生成HTML响应。让我们看看下一步我们如何能做到这一点。