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