ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

在7天-第2天逐步学习MVC(模型视图控制器)

2020-08-08 09:31:26  阅读:135  来源: 互联网

标签:控制器 http URL 单元测试 视图 MVC


MVC 2非常古老,本文是在很久以前编写的。我们建议你从这里开始阅读我们最新的学习MVC 5系列:-http:// www.codeproject.com/articles/866143/learn - mvc-逐日逐步学习 内容 那么,议程是什么?第一天:控制器、强类型的视图和助手类2天:单元测试,路由和出站url第三天:-局部视图、数据注释,剃须刀,身份验证和授权第四天:- JSON, JQuery,状态管理和中控制器第五天:捆绑,缩小,视图模型、领域和异常处理6天:显示模式,MVC OAuth,模型绑定、布局和自定义视图引擎实验室6:单元测试MVC项目 第1步:创建一个简单的显示客户屏幕项目第2步:添加一个简单的单元测试项目第3步:添加适当的项目引用第4步:编写单元测试第5步:最后运行单元测试那么下一个实验是什么? 实验7:理解MVC路由 步骤1:采用第一天创建的MVC项目步骤2:更改global.asax.cs步骤3:运行应用程序那么下一个实验室是什么? 实验8:验证和设置MVC url的默认值 步骤1:创建一个简单的客户模型步骤2:创建控制器类步骤3:在MVC路由上使用regex应用验证步骤4:测试它是否有效那么下一个实验室是什么? 实验9:理解MVC出站url 步骤1:创建视图步骤2:为视图创建控制器步骤3:在链接中提供操作步骤4:享受您的导航 第三天是什么?50个MVC访谈问题和答案 那么,议程是什么? 在第二天,我们将研究以下四个实验室: 在MVC项目上编写单元测试。配置MVC工艺路线。验证MVC路线。配置MVC出站路由。 得到其他部分的链接MVC文章如下:- 第1天:控制器、强类型视图和助手类 http://www.codeproject.com/Articles/207797/Learn-MVC-Model-view-controller-Step-by-Step-in-7 第2天:-单元测试,路由和出站url http://www.codeproject.com/Articles/259560/Learn-MVC-Model-view-controller-Step-by-Step-in-7 第三天:—部分视图、数据注释、Razor、身份验证和授权 http://www.codeproject.com/Articles/375182/Learn-MVC-Model-View-Controller-Step-by-Step-in-4 第4天:- JSON, JQuery,状态管理和异步控制器 http://www.codeproject.com/Articles/667841/Learn-MVC-Model-view-controller-Step-by-Step-in-3 第5天:—绑定、缩小、视图模型、区域和异常处理 http://www.codeproject.com/Articles/724559/Learn-MVC-Model-view-controller-Step-by-Step-in-7 -显示模式,MVC OAuth,模型绑定,布局和自定义视图引擎 http://www.codeproject.com/Articles/789278/Learn-MVC-Model-view-controller-Step-by-Step-in-d 如果你是一个全新的人,我建议从下面的MVC网站4个视频开始,大约10分钟,这样你可以快速来到MVC。 实验室没有。实验室的描述 同样为Youtube视频演示1个简单的Hello world ASP。净MVC应用程序。http://youtu.be/KAKxm4eQP24?在这个实验室中,我们将看到如何使用视图数据在控制器和视图之间共享数据。http://youtu.be/Fu9v2MIDlTA?在这个实验室中,我们将创建一个简单的客户模型,并在视图中显示相同的数据。http://youtu.be/0-UdqWy9lVc?在这个实验室中,我们将创建一个简单的客户数据输入屏幕,并在视图上进行一些验证。http://youtu.be/1dlxtHuRw34?hd=1 让我们从上面四个实验室一个一个的开始。 实验6:单元测试MVC项目 当我们开始整个MVC系列(第一天)时,我们首先关注两个关于代码背后的问题: 如何在ASP上进行单元测试。网络后台代码?我们如何重用ASP。NET背后的代码与不同的用户界面? 在本节中,让我们集中讨论第一点,即。、单元测试。 如果我们需要在ASP中对下面的方法btngenerateinvoices_click进行单元测试,那么简单回顾一下。NET后面的代码,我们有以下问题: 如何创建sender和eventargs对象?下面的完整代码在HttpContext对象下运行,我如何模拟它?关于ASP。NET UI控件,我如何访问它们?其他ASP呢?NET对象,如会话对象,应用程序,我如何访问它们? 供参考:许多开发人员会谈论模拟测试、rhino模拟等,但它仍然是神秘的,而且随着会话变量、视图数据对象、ASP等的增加,复杂性也会增加。NET UI控件,造成进一步的混乱。 在这一节中,我们将创建一个简单的MVC应用程序,并在ASP上进行单元测试。NET应用程序使用VSTS单元测试框架。 步骤1:创建简单的显示客户屏幕项目 第一步是创建一个简单的MVC项目。我们将使用与h相同的项目在MVC(模型视图控制器)第1天讨论。因此,如果你没有任何样例项目,请创建一个使用上面的链接。 最后,控制器类是一个简单的。net类。例如,如果你仔细观察你的项目代码,你可以很容易地看到如下所示的customer controller类: 隐藏,复制Code

public class CustomerController : Controller
{
...
....
public ViewResult DisplayCustomer()
{
Customer objCustomer = new Customer();
objCustomer.Id = 12;
objCustomer.CustomerCode = "1001";
objCustomer.Amount = 90.34;

return View("DisplayCustomer",objCustomer);
}
}

简单地说,因为这是一个简单的。net类,所以我们可以很容易地实例化这个类并为它创建自动化的单元测试。这正是我们下一步要做的。 步骤2:添加一个简单的单元测试项目 让我们使用VSTS单元测试框架来测试控制器类。如果您是VSTS单元测试的新手,请参阅本文了解单元测试:http://www.codeproject.com/KB/cs/VSTSTesting.aspx。使用测试项目解决方案模板向您的解决方案添加一个新项目。 步骤3:添加适当的项目引用 我们需要在单元测试项目中添加对MVC应用程序的引用,以便我们能够获得控制器类。 一旦你添加了引用,你应该看到MVC应用程序在你的项目引用如下图所示: 步骤4:编写单元测试 一旦您添加了引用,打开单元测试类,即。, UnitTest1.cs。在这个类中创建一个名为DisplayCustomer的简单测试方法,它由TestMethod属性赋予属性,如下面的代码片段所示。 如果您看到下面的代码片段,我们正在创建控制器类的一个对象,调用控制器操作,即。,然后检查视图名称是否为DisplayCustomer。如果它们相等,则意味着测试通过,否则测试失败。 隐藏,复制Code

[TestMethod]
public void DisplayCustomer()
{
CustomerController obj = new CustomerController();
var varresult = obj.DisplayCustomer();
Assert.AreEqual("DisplayCustomer", varresult.ViewName);
}

步骤5:最后运行单元测试 一旦编写了测试用例,就可以通过单击test、windows,然后单击test view来运行测试用例。 在test视图中,右键单击测试并运行所选的测试用例,如下所示: 如果一切顺利,您应该会看到一个绿色,表示测试通过了,或者您应该看到一个红色,带有关于测试失败原因的详细信息。 下一个实验室里会有什么 在下一个实验室我们将讨论MVC路由。MVC就是将动作连接到控制器,MVC路由帮助我们实现这一点。所以准备好进入我们的下一个教程。 实验7:理解MVC路由 介绍 最后,MVC只不过是一个映射到控制器和映射到动作的控制器的URL。 例如,当用户从浏览器发送一个类似于www.questpond.com/locateproduct的请求URL时,这些操作将被映射到MVC控制器中,MVC控制器最终调用这些函数。 下面是一个简单的表格,显示了整个事情的样子: 更复杂的是,我们可以将多个URL映射到一个控制器,也可以将多个控制器映射到单个URL。例如,您可以将www.questpond.com/contactus和www.questpond.com/aboutus映射到一个名为AboutUsController的控制器。 如果我们有某种机制可以配置这些映射,那就太好了。这正是MVC路由的意义所在。MVC路由有助于轻松配置URL并将其与控制器映射。 步骤1:以第1天创建的MVC项目为例 让我们以在上一节中讨论过的同一个客户项目为例。 第二步:改变全球 所有路由映射都存储在“global.asax”中。cs“后台代码文件。所以第一步是我们需要去改变这个文件。 所有路由映射都存储在一个名为routes的集合中。此集合属于名称空间System.Web.Routing。要添加路由,需要调用MapRoute方法并传递三个参数名称、url和默认值。 下面是maproute函数片段的打印屏幕。 Name是将通过它从集合中标识路由的键名。Url定义了我们想要与控制器连接的Url格式。例如,在下面的代码片段中,我们说View/ViewCustomer是URL格式。默认值定义了当URL被调用时将被调用的控制器类和动作函数。例如,在下面的代码中,我们说当View/ViewCustomer被调用时,它将调用Customer控制器类,而被调用的动作函数将是DisplayCustomer。 如果你的控制器接受参数,你可以使用{括号。例如,在下面的代码片段中,我们使用了{来指定我们可以有一个id参数。如果希望将参数定义为可选参数,可以使用UrlParameter。可选的枚举。 第一件事是注释默认映射代码。稍后我们将解释默认映射代码。 隐藏,复制Code

//routes.MapRoute(
// "Default", // Route name
// "{controller}/{action}/{id}", // URL with parameters
// new { controller = "Home", action = "Index", id = 
UrlParameter.Optional }); // Parameter defaults

放置以下代码,这意味着当我们调用http://localhost/View/ViewCustomer/时,它将调用客户控制器,并将调用displaycustomer函数。 隐藏,复制Code

routes.MapRoute(
"View", // Route name
"View/ViewCustomer/{id}", // URL with parameters
new { controller = "Customer", action = "DisplayCustomer", 
id = UrlParameter.Optional }); // Parameter defaults

下面是将要调用的操作函数DisplayCustomer。 隐藏,复制Code

public ViewResult DisplayCustomer()
{
Customer objCustomer = new Customer();
objCustomer.Id = 12;
objCustomer.CustomerCode = "1001";
objCustomer.Amount = 90.34;

return View("DisplayCustomer",objCustomer);
}

步骤3:运行应用程序 如果运行该应用程序,应该会看到以下显示。 如果您还记得我们注释了默认的入口路径的话。让我们来了解一下这个默认代码的确切含义。 "{controller}/{action}/{id}"定义了URL将被自动命名为控制器名称/函数动作名称/值的约定。因此,如果您有一个将Customer和action函数作为搜索的控制器类,那么URL将自动结构为http://xyz.com/Customer/Search。 隐藏,复制Code

//routes.MapRoute(
// "Default", // Route name
// "{controller}/{action}/{id}", // URL with parameters
// new { controller = "Home", action = "Index", id = 
UrlParameter.Optional }); // Parameter defaults

下一个实验室里有什么? 在下一个实验中,我们将讨论如何验证MVC URL。所有对MVC的操作都是通过MVC URL进行的,甚至数据也是通过MVC URL提供的。因此在下一节中,我们将看到如何验证在MVC URL中传递的数据。 实验8:验证和设置MVC url的默认值 MVC都是关于通过URL发生的动作,这些动作的数据也由URL提供。如果我们能验证通过这些MVC url传递的数据,那就太好了。 例如,让我们考虑MVC URL http://localhost/Customer/ViewCustomer。如果任何人想查看1001客户代码的客户详细信息,他需要输入http://localhost/Customer/ViewCustomer/1001。 客户代码本质上是数字的。换句话说,任何人输入类似于http://localhost/Customer/ViewCustomer/Shiv的MVC URL都是无效的。MVC框架提供了一种验证机制,通过这种机制,我们可以检查URL本身是否使用了适当的数据。在这个实验中,我们将看到如何验证在MVC URL中输入的数据。 步骤1:创建一个简单的客户模型 第一步是创建一个简单的customer类模型,它将由控制器调用。 隐藏,复制Code

public class Customer
{
public int Id { set; get; }
public string CustomerCode { set; get; }
public double Amount { set; get; }
}

步骤2:创建控制器类 下一步是创建一个简单的控制器类,它拥有在步骤1中创建的customer模型对象的集合。 隐藏,收缩,复制Code

public class CustomerController : Controller
{
List<Customer> Customers = new List<Customer>();
//
// GET: /Customer/
public CustomerController()
{
Customer obj1 = new Customer();
obj1.Id = 12;
obj1.CustomerCode = "1001";
obj1.Amount = 90.34;

Customers.Add(obj1);

obj1 = new Customer();
obj1.Id = 11;
obj1.CustomerCode = "1002";
obj1.Amount = 91;
Customers.Add(obj1);

}

[HttpGet]
public ViewResult DisplayCustomer(int id)
{
Customer objCustomer = Customers[id];

return View("DisplayCustomer",objCustomer);
}
}

控制器有一个简单的DisplayCustomer函数,它使用id值显示客户。该函数接受id值并在客户集合中查找。下面是该函数的缩小后的重新发布的代码。 隐藏,复制Code

[HttpGet]
public ViewResult DisplayCustomer(int id)
{
Customer objCustomer = Customers[id];

return View("DisplayCustomer",objCustomer);
}

如果你看DisplayCustomer函数,它接受一个数字id值。我们想在这个ID字段上进行验证,包含以下约束: Id应该始终是数字。它应该在0到99之间。 我们希望在使用数据调用MVC URL时触发上述验证。 步骤3:在MVC路由上使用正则表达式应用验证 步骤2中描述的验证可以通过在路线图上应用正则表达式来实现。如果你去全球。并查看asax文件中的maproute函数,该函数的输入是约束,如下图所示。 如果您是正则表达式的新手,我们建议您浏览一下这个关于正则表达式的视频:http://youtu.be/c2zm0roe-uc? 因此,为了适应数字验证,我们需要指定regex约束,即。, ' \d{1,2} '中的maproute函数,如下所示。' \d{1,2} '在正则表达式中意味着输入应该是数字的,并且最大长度应该是1或2,即在0到99之间。 您可以通过输入id=0来指定默认值,如下面的代码片段所示。以防万一,如果有人没有指定ID的值,它将默认接受值为0。 隐藏,复制Code

routes.MapRoute(
"View", // Route name
"View/ViewCustomer/{id}", // URL with parameters
new { controller = "Customer", action = "DisplayCustomer", 
id = 0 }, new { id = @"\d{1,2}" }); // Parameter defaults

第四步:测试它是否有效 现在我们已经使用maproute函数完成了验证,现在可以测试这些验证是否有效了。在第一个测试中,我们指定了valid 1,我们看到控制器被击中,数据被显示。 如果尝试指定值超过100,将会出现如下所示的错误。请注意,这个错误令人困惑,但这是在maproute函数中指定的正则表达式验证的影响。 如果您试图指定一个非数字值,您应该再次得到相同的错误,这将确认我们的正则表达式验证工作正常。 需要注意的最重要一点是,这些验证甚至在请求到达控制器函数之前就执行了。 下一个实验室里会有什么 在任何网站开发中,一个至关重要的事情就是定义从一个页面到另一个页面的导航。在MVC中,一切都是一个动作,这些动作会调用视图或页面。我们不能指定像www.questpond.com/home.aspx这样的直接超链接,这将违背MVC的目的。换句话说,我们需要指定操作,这些操作将调用url。 在下一个实验中,我们将研究如何在MVC视图中定义一个出站URL,它将帮助我们从一个页面导航到另一个页面。 实验室9:Understanding MVC出站url 介绍 当我们谈到web应用程序时,终端用户希望从一个页面导航到另一个页面。因此,作为一个简单的开发人员,您的第一个想法就是提供如下图所示的页面名称。 例如,如果你想从家里浏览。aspx有关。aspx给锚一个超链接的页面名称,这样就没问题了。 这样做违背了MVC原则。MVC原则说命中应该首先到达控制器,但是通过指定<a href="/KB/aspnet/Home.aspx">第一个点击出现在视图中。这完全绕过了你的控制器逻辑,你的MVC架构就会失败。 理想情况下,操作应该指导应该调用哪个页面。因此,超链接应该在锚标记中有操作,而不是在页面名称中。,直接视图名称。 步骤1:创建视图 让我们创建如下图所示的三个视图Home、About和Product。 让我们在这三个页面之间创建一个简单的导航,如下所示。从home视图,我们想导航到about和产品视图。从“关于”和“产品”视图,我们想要导航回主页视图。 步骤2:为视图创建控制器 下一步是定义将调用这些视图的控制器操作。在下面的代码片段中,我们定义了三个操作:GotoHome(调用home视图)、Aboutus(调用about视图)和SeeProduct(调用product视图)。 隐藏,复制Code

public class SiteController : Controller
{
//
// GET: /Site/

public ActionResult GotoHome()
{
return View("Home");
}

public ActionResult AboutUs()
{
return View("About");
}

public ActionResult SeeProduct()
{
return View("Product");
}
}

步骤3:在链接中提供操作 要调用操作而不是视图,我们需要在锚标记中指定操作,如下面的代码片段所示。 隐藏,复制Code

This is products
<a href="GotoHome">Go Home</a><br />
<a href="Aboutus">About us</a><br />

如果希望使用HTML helper类创建锚链接,可以使用操作链接函数,如下面的代码片段所示。 隐藏,复制Code

<%= Html.ActionLink("Home","Gotohome") %>

以上代码是针对产品页面的,您可以对about us和主页进行相同类型的导航。 隐藏,复制Code

This is About us
<ahref="GotoHome">Go Home</a><br/>
<ahref="SeeProduct">See Product</a><br/>

This is home page
<br/>
<ahref="SeeProduct">See Product</a><br/>
<ahref="Aboutus">About us</a><br/>
</div>

第四步:享受你的导航 一旦指定了链接中的操作,就可以在home、about和products页面之间导航。 在导航时,你可以看到url是如何指向动作的,而不是像home这样的绝对页面名称。aspx, aboutus。aspx等,这违反了完整的MVC原则。 第三天是什么? 在第三节中,我们将讨论部分视图、使用数据注释的验证、Razor (MVC 3)、MVC Windows身份验证、MVC表单身份验证等等。与第二天相比,下一个实验室会更先进一些。下面是第三天的链接:点击这里查看第三天MVC的一步一步。 最后一点:你可以观看我的。net访谈问答视频,内容涉及各种话题,比如WCF、Silverlight、LINQ、WPF、设计模式、实体框架等等。 用于与各种主题相关的技术培训,包括ASP。请联系SukeshMarla@gmail.com或访问www.sukesh-marla.com 从MVC 5开始 如果你想开始与MVC 5开始与下面的视频学习MVC 5在2天。 50个MVC访谈问题和答案 如果你要去面试,你可以阅读我的50个重要的MVC面试问题回答文章http://www.codeproject.com/articles/556995/model-view-controller-mvc-interview-question- and 本文转载于:http://www.diyabc.com/frontweb/news1815.html

标签:控制器,http,URL,单元测试,视图,MVC
来源: https://www.cnblogs.com/Dincat/p/13456452.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有