Asp.net Core入门(二)
今天主要介绍一下Asp.net中的MVC编程模式:
MVC 是三种 ASP.NET 编程模式中的一种。
MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:
Model(模型)表示应用程序核心(比如数据库记录列表)。
View(视图)显示数据(数据库记录)。
Controller(控制器)处理输入(写入数据库记录)。
MVC 分层有助于管理复杂的应用程序,因为可以在一个时间内专门关注一个方面。例如,可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。
即便如此,MVC的缺点也是显而易见的。譬如没有明确的定义,完全理解MVC并不是很容易。使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。同时由于模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难。每个构件在使用之前都需要经过彻底的测试。
ASP.Net MVC Controller
标准的MVC控制器的格式如下所示:
[Controller]
Public class AnimalsController:Controller
{ Public IActionResult Detail(int id)
{
Return View();
}
其中的Detail为一个Action函数,主要有如下两个作用:
1、处理请求(GET和POST)
2、返回一个特殊的数据类型IActionResultAction默认的http请求方式为GET,此外也支持请求中的URL的参数。例如…/…/{id}当Action函数处理POST请求时,在方法属性上写上[HttpPost],方法上的参数将会和请求参数进行匹配,若参数一致,则进行相关操作,并返回给view。
创建控制器Demo
右键controllers文件,新建一个item,选择Class,命名为Test.Cs。代码如下:
namespace lanzhoubeefnoodles.controllers
{
public class Test
{
public String Index()
{
return "Hello From test Index";
}
public String About()
{
return "Hello from test About";}
}
}
需要注意的是,现在的Test类目前还不是真正的Controller类,那么我们如何将其定义为Controllerl类呢?有如下三种方法:
1、将类名Test修改为TestController,ASP.Net将自动将其识别为Controller
2、在类名上添加属性[Controllrt]
3、Test直接继承Controller
namespace lanzhoubeefnoodles.controllers
{
public class Test:Controller
{
public String Index()
{
return "Hello From test Index";
}
public String About()
{
return "Hello from test About";}
}
}
三种方法中直接继承Controller方法可以使我们调用大量的已定义好的一些函数,其他没啥区别。
然而在Controller中直接返回单一数据类型并不是特别的安全和完善,不过强大的.NET提供了强大的ActionResult类可以将我们传入的数据进行自动转换,使用Content可以以将string,json等的数据打包返给View。在以上的代码加入如下的Contact函数:
public ActionResult Contact()
{
return View();
}
右键点击Contact函数,选择添加视图,我们先什么都不用动,直接添加,完成后在右边的项目中会生成一个Views文件夹,点击打开其中的Contact.cshtmml(就是你命名的函数的html文件),打开后如下修改为代码:
@{
ViewData["Title"] = "Contact";
}
<h2>联系我们</h2>
好,大功告成,运行项目,在url栏中输入https://localhost:5001/test/contact 成功在页面上输出“联系我们”四个大字。
总结
ASP.Net MVC采用了MVC的设计模式来对处理的请求进行控制和进行相应的Response回应。主要的优点为耦合度低,比如需要在控制器修改代码时,view视图层无需修改,减少了时间成本。第二,可重用性高。大大降低了编程的代码成本,解放程序员的双手,可以将重点转向其他的核心业务。