模型 – 视图 – 控制器(MVC)架构模式将应用程序分为三个主要组件:M odel,View和Controller。
模型:表示应用程序数据的类。模型类使用验证逻辑来强制执行该数据的业务规则。通常,模型对象检索并存储数据库中的模型状态。在本教程中,Movie模型从数据库中检索电影数据,将其提供给视图或更新它。更新的数据将写入数据库。
视图:视图是显示应用的用户界面(UI)组件。通常,此UI显示模型数据。
控制器:处理浏览器请求的类。他们检索模型数据并调用返回响应的视图模板。在MVC应用程序中,视图仅显示信息; 控制器处理和响应用户输入和交互。例如,控制器处理路由数据和查询字符串值,并将这些值传递给模型。模型可能使用这些值来查询数据库。
例如,https://localhost:1234/Home/About 具有Home(控制器)的路由数据和About(在Home控制器上调用的动作方法)。https://localhost:1234/Movies/Edit/5是使用Movies控制器的Edit法法,把ID = 5这个值传给这个方法。
控制器里面的所有public方法 都可以被浏览器访问
MVC根据传入的URL调用控制器类(及其中的操作方法)。MVC使用的默认URL路由逻辑使用这样的格式来确定要调用的代码:
/[Controller]/[ActionName]/[Parameters]
路由格式Configure在Startup.cs文件中的方法中设置。
app.UseMvc(routes => { routes.MapRoute( name: “default”, template: “{controller=Home}/{action=Index}/{id?}”); });
当您浏览应用程序并且不提供任何URL段时,它默认为“Home”控制器和上面突出显示的模板行中指定的“Index”方法。
第一个URL段确定要运行的控制器类。所以localhost:xxxx/HelloWorld映射到HelloWorldController班级。URL段的第二部分确定类的操作方法。因此localhost:xxxx/HelloWorld/Index会导致类的Index方法HelloWorldController运行。请注意,您只需要浏览到默认情况下调用localhost:xxxx/HelloWorld该Index方法。这是因为Index如果未明确指定方法名称,将在控制器上调用的默认方法。URL segment(id)的第三部分用于路由数据。路线数据将在本教程后面解释。
浏览到https://localhost:xxxx/HelloWorld/Welcome。该Welcome方法运行并返回字符串This is the Welcome action method…。对于此URL,控制器是HelloWorld并且Welcome是操作方法。您还没有使用过该[Parameters]部分网址。
修改代码以将一些参数信息从URL传递到控制器。例如,/HelloWorld/Welcome?name=Rick&numtimes=4。更改Welcome方法以包含两个参数,如以下代码所示。
C#
复制
// GET: /HelloWorld/Welcome/
// Requires using System.Text.Encodings.Web;
public string Welcome(string name, int numTimes = 1)
{
return HtmlEncoder.Default.Encode($”Hello {name}, NumTimes is: {numTimes}”);
}
上面的代码:
numTimes如果没有为该参数传递值,则使用C#可选参数功能指示参数默认为1。
用于HtmlEncoder.Default.Encode保护应用程序免受恶意输入(即JavaScript)。
使用插值字符串在$”Hello {name}, NumTimes is: {numTimes}”。
运行应用程序并浏览到:
https://localhost:xxxx/HelloWorld/Welcome?name=Rick&numtimes=4
(请以你的端口号XXXX)。你可以尝试不同的值name,并numtimes在URL中。MVC 模型绑定系统自动将命名参数从地址栏中的查询字符串映射到方法中的参数。