注意
如果本教程使用 Visual Studio 2013在此处提供,则为更新的版本。 新教程使用 ASP.NET MVC 5,这比本教程提供了许多改进。
这是一个初学者教程,介绍 ASP.NET MVC 的基础知识。 你将创建一个从数据库读取和写入的简单 Web 应用程序。 请访问 ASP.NET MVC 学习中心 ,查找其他 ASP.NET MVC 教程和示例。
MVC 代表 Model、View、Controller。 MVC 是一种开发应用程序的模式,使每个部件都有不同于另一部分的责任。
- 模型:应用程序的数据
- 视图:应用程序将用于动态生成 HTML 响应的模板文件。
- 控制器:处理传入应用程序的 URL 请求、检索模型数据,然后指定将响应呈现回客户端的视图模板的类
本教程将介绍所有这些概念,并演示如何使用这些概念来生成应用程序。
让我们通过右键单击解决方案资源管理器中的 controllers 文件夹并选择“添加控制器”来创建新的控制器。
将新控制器命名为“HelloWorldController”,然后单击“添加”。
请注意,在右侧的解决方案资源管理器中,已为你创建了一个名为 HelloWorldController.cs 的新文件,该文件现已在 IDE 中打开。
在新的公共类 HelloWorldController 中创建两个如下所示的新方法。 我们将直接从控制器返回 HTML 字符串作为示例。
using System.Web.Mvc;
namespace Movies.Controllers
{
public class HelloWorldController : Controller
{
public string Index()
{
return "This is my default action...";
}
public string Welcome()
{
return "This is the Welcome action method...";
}
}
}
控制器名为 HelloWorldController,新方法名为 Index。 再次运行应用程序,就像之前一样, (单击播放按钮或按 F5 执行此操作) 。 浏览器启动后,将地址栏中的路径更改为 http://localhost:xx/HelloWorld
xx 是计算机选择的任何数字。 现在,浏览器应如下面的屏幕截图所示。 在上面的方法中,我们返回了一个字符串,该字符串传递到名为“Content”的方法中。我们告诉系统只是返回一些 HTML,它做到了!
ASP.NET MVC) 调用不同的控制器类 (和它们中的不同 Action 方法,具体取决于传入 URL。 ASP.NET MVC 使用的默认映射逻辑使用如下所示的格式来控制运行的代码:
/[Controller]/[ActionName]/[Parameters]
URL 的第一部分确定要执行的 Controller 类。 因此/HelloWorld 映射到 HelloWorldController 类。 URL 的第二部分确定要执行的类上的 Action 方法。 因此,/HelloWorld/Index 将导致执行 HelloWorldController 类的 Index () 方法。 请注意,我们只需要访问上面的 /HelloWorld,并且方法 Index 是隐含的。 这是因为名为“Index”的方法是默认方法,如果未显式指定,将在控制器上调用该方法。
现在,让我们访问 http://localhost:xx/HelloWorld/Welcome.
欢迎方法已执行并返回其 HTML 字符串。
同样,/[Controller]/[ActionName]/[Parameters],因此控制器为 HelloWorld,在这种情况下,Welcome 是方法。 我们尚未完成参数。
让我们稍微修改示例,以便可以将一些信息从 URL 传递到控制器,例如:/HelloWorld/Welcome?name=Scott&numtimes=4。 更改 Welcome 方法以包含两个参数并更新它,如下所示。 请注意,我们已使用 C# 可选参数功能来指示参数 numTimes 应默认为 1(如果未传入)。
public string Welcome(string name, int numTimes = 1)
{
string message = "Hello " + name + ", NumTimes is: " + numTimes;
return "" + Server.HtmlEncode(message) + "";
}
运行应用程序,并根据需要访问 http://localhost:xx/HelloWorld/Welcome?name=Scott&numtimes=4
更改 name 和 numtimes 的值。 系统自动将地址栏中的查询字符串中的命名参数映射到方法中的参数。
在这两个示例中,控制器一直在执行所有工作,并且已直接返回 HTML。 通常,我们不希望控制器直接返回 HTML -因为这最终对代码非常繁琐。 相反,我们通常使用单独的视图模板文件来帮助生成 HTML 响应。 让我们看看如何执行此操作。 关闭浏览器并返回到 IDE。