一步一步学习MVC(模型-视图-控制器)在7天,第四天

MVC 2是安静的老和本文是多年后写的。我们建议您从我们开始阅读新鲜学习MVC 5从这里一步一步系列:http: / / www.codeproject.com/Articles/866143/Learn-MVC-step-by-step-in-days-Day 内容 那么,议程是什么? 在第4天,我们将查看JSON, Jquery,Aysnch控制器和与MVC的会话管理。 得到链接的其他部分的asp.net MVC教程如下:- 第一天:控制器、强类型的视图和助手类 http://www.codeproject.com/Articles/207797/Learn-MVC-Model-view-controller-Step-by-Step-in-7 第二天:单元测试、路由和出站url http://www.codeproject.com/Articles/259560/Learn-MVC-Model-view-controller-Step-by-Step-in-7 第三天:局部视图、数据注释,剃须刀,身份验证和授权 http://www.codeproject.com/Articles/375182/Learn-MVC-Model-View-Controller-Step-by-Step-in-4 第四天:- JSON, JQuery、状态管理和中控制器 http://www.codeproject.com/Articles/667841/Learn-MVC-Model-view-controller-Step-by-Step-in-3 第五天:捆绑、缩小视图模型、领域和异常处理 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 实验15:- JSON, MVC和Jquery 如果你是一个新的JSON请阅读这之前继续这个实验室,什么是JSON ? 所以在这个实验中,我们将以JSON格式从MVC中公开一个简单的“Customer”对象,并使用Jquery使用相同的格式。 对于这个实验室,请确保项目是使用基本项目模板创建的,以便必要的Jquery库包含在MVC项目中。 步骤1:-创建一个简单的客户模型 因此,第一步是在MVC项目中创建一个简单的“Customer”类。 隐藏,复制Code

public class Customer
    {
        private string _CustomerCode;
        public string CustomerCode
        {
            get { return _CustomerCode; }
            set { _CustomerCode = value; }
        }
    } 

第2步:—将客户对象公开为JSON 那么,议程是什么? 第一天:控制器、强类型的视图和助手类 第二天:单元测试、路由和出站url 第三天:局部视图、数据注释,剃须刀,身份验证和授权 第4天:- JSON, JQuery,状态管理和异步控制器 第五天:捆绑、缩小视图模型、领域和异常处理 第6天:-显示模式,MVC OAuth,模型绑定,布局和自定义视图引擎实验室15:- JSON,MVC和Jquery 步骤1:-创建一个简单的客户模型 第2步:—将客户对象公开为JSON 第3步:-使用jquery中的JSON控制器 第4步:-运行应用程序并查看数据 实验16:- MVC中的会话管理(ViewData,ViewBag,TempData和会话变量) 步骤1:创建两个控制器“DefaultController1”和“DefaultController2”。 步骤2:-设置Session, tempdata, viewdata和viewbag 步骤3:-读取会话、tempdata、viewdata和viewbag值 实验室17:-异步控制器 从AsyncController类继承 第2步:-标记方法Async追加 步骤3:-创建完成的方法 第四步:-确保创建“一些重量级的方法”。aspx”视图 第五步:-跑步并享受 第五天是什么? 50个MVC访谈问题和答案 你对MVC是全新的吗? 要以JSON格式公开客户对象,我们需要使用“JsonResult”,如下面的代码片段所示。 隐藏,复制Codepublic JsonResult getJson() { Customer obj = new Customer(); obj。CustomerCode = " c001”; 返回Json (obj, JsonRequestBehavior.AllowGet); } 请执行以上JSON操作运行控制器以检查JSON结果是否正确显示。如果你使用的是chrome浏览器,它会在浏览器上显示,如果是ie浏览器,它会吐出一个文件。 第3步:-使用jquery中的JSON控制器 如果你是新的Jquery,请阅读这是什么是Jquery ? 下一步是使用MVC视图在Jquery中使用JSON数据。继续添加一个视图例如,我的视图名是" LearnJquery.aspx " 首先,在ASPX页面的顶部添加Jquery库。如果您在项目中没有找到jquery库,这意味着您没有使用基本模板创建MVC项目。 隐藏,Code<复印件;脚本src = " . . / . . /脚本/ jquery-1.8.2.js”祝辞& lt; / script> 然后,您可以调用使用“getJson”方法以JSON格式公开的控制器,如下所示。它有三个参数:- “getJson”中的第一个参数是具有完整控制器/动作路径格式的MVC JSON URL。第二个参数是要传递的数据。现在它是NULL,因为我们更感兴趣的是获取JSON数据而不是发布数据。最后一个参数是回调方法(“Display”),一旦我们从控制器获得JSON数据,它就会被调用。的“显示”功能也可用下面的代码片段。我只是在属性名上放了一个警告。供您参考,您可以看到我刚才是如何键入“data”的。JSON数据被自动转换成javascript对象。 隐藏,复制代码美元。getJSON(“/ Json / getJSON”,null,显示); 函数显示(数据) { 警报(data.CustomerCode); } 完整的MVC视图HTML如下所示。我创建了一个简单的HTML按钮,在click事件上我调用了一个“getJson”javascript方法,该方法调用JSON控制器并在javascript警报中显示JSON数据。 隐藏,复制Code<脚本语言=“javascript”比; getJson函数(){ 美元。getJSON(“/ Json / getJSON”,null,显示); 返回true; } 函数显示(数据) { 警报(data.CustomerCode); } & lt; / script> <input type="button" value="See Json data" onclick="return getJson();"/> 这个视图是我使用“DisplayJson”操作调用的。 隐藏,复制Codepublic类JsonController: Controller { 公共ActionResult DisplayJson () { 返回视图(“LearnJquery”); } } 第4步:-运行应用程序并查看数据 在您完成了所有艰苦的工作之后,就可以点击“DisplayJson”操作来查看运行中的美了。 实验16:- MVC中的会话管理(ViewData,ViewBag,TempData和会话变量) MVC的主要目标是创建web应用程序,而web应用程序使用HTTP协议。HTTP协议本质上是无状态的。因此,当你发送一个请求到MVC应用程序时,它会服务于请求并忘记请求。下一次,当同一个用户发送请求时,MVC将其视为一个完整的新请求。 现在想想下面的情况:- 最终用户发送请求到MVC站点。MVC发送一个登录页面。用户输入正确的细节并将数据发送到MVC应用程序。MVC验证用户并发送站点的主页。MVC应用程序现在忘记了关于用户的一切,因为它是无状态的。现在用户单击一个主页链接。这是发送到MVC应用程序,因为MVC应用程序已经忘记了关于用户的一切,他再次发送一个登录页面进行身份验证…用户会觉得很奇怪… 简而言之,我们需要某种机制来帮助我们记住MVC请求和响应之间的状态。 在MVC中有三种维护状态的方法,这些方法可以根据你导航的层来使用。 Temp数据:-帮助维护单个请求和响应的重定向数据。重定向可以是从控制器到控制器或从控制器到视图。 视图数据:-当你从控制器移动到视图时,帮助维护数据。 视图包:-它是一个动态包装周围的视图数据。当你使用“Viewbag”时,类型转换是不需要的。它在内部使用动态关键字。 会话变量:通过使用会话变量,我们可以维护数据,直到浏览器关闭。 让我们通过一个演示来演示上面的基本原理。 步骤1:创建两个控制器“DefaultController1”和“DefaultController2”。 添加两个控制器“DefaultController1”和“DefaultController2”。 步骤2:-设置Session, tempdata, viewdata和viewbag 在“Action1”中的“Default1Controller”中,我们设置了会话、tempdata、viewdata和viewbag值,如下面的代码片段所示。一旦我们设置了这些值,我们将重定向到属于“Controller2”的动作“SomeOtherAction”。 隐藏,复制Codepublic类Default1Controller: Controller { // / /得到:/ Default1 / 公共ActionResult Action1 () { 会话(“Session1) =“UntilBrowserCloses”; TempData[“FortheFullRequest”]=“FortheFullRequest”; 显示数据(“Myval”)=“ControllertoView”; ViewBag。MyVal = " ControllertoView”; 返回RedirectToAction(“SomeOtherAction”、“Default2”); }} 步骤3:-读取会话、tempdata、viewdata和viewbag值 在" Default2Controller "中,我们将尝试读取" Default1Controller "中设置的值。一旦读取了这些值,我们就调用一个名为“SomeView”的视图。 请注意,我在重定向到视图之前设置了“ViewData”和“ViewBag”。 隐藏,复制Codepublic类Default2Controller: Controller { // / /得到:/ Default2 / 公共ActionResult SomeOtherAction () { ("FortheFullRequest"]); 字符串str2 = Session["Session1"].ToString(); (ViewData["Myval"]); 显示数据(“Myval”)=“ControllertoView”; ViewBag。MyVal = " ControllertoViewCollection”; 返回视图(“SomeView”); } } “SomeView”视图只是显示在“TempData”、“ViewData”、“ViewBag”和“Session”中出现的数据。 隐藏,复制Code<%= TempData["FortheFullRequest"] %><br /> <%= ViewData["Myval"] %> > 会话(“Session1) & lt; % = %比; & lt; % = ViewBag。MyVal %比; & lt; a href = " / Default1 / Action1”祝辞Click< / a> 让我们在控制器动作中放入调试点,点击Default1 controller和Action1 action http://localhost:1203/default1 /Action1。在这个动作会话中,tempdata,viewdata和viewbag被加载。下面是带有数据的观察窗口。 现在从这里我们重定向到controller2动作“SomeOtherAction”。 在controller2中,你可以看到get“TempData”和“Session”变量,而不是“ViewBag”和“ViewData”(见“str3”和“str4”被设置为null)。换句话说,“ViewData”和“ViewBag”不会在重定向中持久化数据,而“TempData”和“Session”变量会。 在调用视图“SomeView”之前,我已经设置了一些数据“ViewData”和“ViewBag”。 当视图被调用时,我们可以看到所有的数据。换句话说,“ViewData”和“ViewBag”将数据从控制器持久化到视图。tempdata和session也有持久化数据。 现在,当视图调用时,我保留了一个从“Controller1”调用“Action1”的click hyper链接。这是模拟一个新的请求。 当我们点击链接时。所有其他变量将关闭,只有会话变量将保留,见下图。这意味着“会话”变量可以在请求之间持久存在。 下面是一个汇总表,显示了不同的持久性机制。 维护视讯系统之间数据/ viewbag tempdata(单一请求)会话控制器,控制器没有是的是的控制器,视图是的是的是的视图控制器不肯定的 实验室17:-异步控制器 说到底,MVC应用程序就是托管在IIS中的web应用程序。现在,当任何请求到达MVC控制器时,它从线程池中拉出一个线程并为该请求服务。换句话说,IIS web服务器维护一个线程池,而不是一次又一次地从头创建线程以获得性能优势。 让我们假设web服务器的线程池大小为2。这只是一个假设因为池的大小是2只是一个假设。但是为了简单起见,请考虑线程池大小为2。 假设第一个请求到达站点,IIS从线程池中取出一个现成的线程对象,并开始为该请求提供服务。同时,假设第二个请求进入,IIS再次从线程池中取出一个线程,并开始为第二个请求提供服务。 现在有趣的是当第三个请求进来时。IIS web服务器池中没有更多的线程对象,因为这些线程对象已经服务于“request1”和“request2”。所以他只是将第三个请求移动到等待模式,或者服务器可以发送“503 busy”消息给客户端。 这种情况称为“线程短缺”。可以通过“异步”请求来克服线程短缺的情况。因此,请求进入后,立即以“异步”方式处理请求,并立即释放服务于该请求的线程。 因此,为了避免这种情况,我们可以通过使我们的控制器“异步”来实现相同的效果。 下面是一个演示MVC线程饥饿的视频。 因此,让我们一步一步地了解如何实现MVC异步控制器。 从AsyncController类继承 考虑下面的控制器类“HeavyController”,它有一个动作“SomeHeavyMethod”,该动作等待20秒。让我们来理解如何让这个简单的控制器成为aasynch控制器。 隐藏,复制Codepublic类的HeavyController: Controller { // / /得到:/重/ 公共ActionResult SomeHeavyMethod () { thread . sleep (20000); 返回视图(); } } 因此,第一步是从“AsyncController”类继承。 隐藏,复制Codepublic类的HeavyController: AsyncController { } 第2步:-标记方法Async追加 下一步是在方法后面添加“Async”单词。所以你可以看到“SomeHeavyMethodAsync”已经被更改为“SomeHeavyMethodAsync”。 沉重的逻辑代码,比如“线程”。Sleep”被转移到另一个方法,该方法是使用“SomeHeavyMethodAsync”中的任务并行库调用的。 每当一个“任务”或一个“线程”启动时,我们使用“AsynchManager”递增未完成的操作计数器,而每当一个多线程任务完成时,我们递减计数器。 隐藏,复制代码公共类HeavyController: AsyncController { 公共空间SomeHeavyMethodAsync () { AsyncManager.OutstandingOperations.Increment (); 的任务。(新行动(重型)); } 公共空间重() { thread . sleep (20000); AsyncManager.OutstandingOperations.Decrement (); } } 步骤3:-创建完成的方法 现在,一旦所有的多线程任务完成,未完成的操作为零,我们需要返回视图。我们所需要的也是这样d创建一个附加了“Completed”单词的动作结果方法。当所有未完成操作为零时调用此方法。 隐藏,复制Codepublic ActionResult SomeHeavyMethodCompleted() { 返回视图(); } 第四步:-确保创建“一些重量级的方法”。aspx”视图 还要确保添加带有文本的“SomeHeavyMethod”视图。 隐藏,复制Code< html> & lt;头runat = " server "比; meta name="viewport" content="width=device-width" /> & lt; title>一些重型method< / title> & lt; / head> & lt; body> & lt; div> 这是在一段时间后加载… & lt; / div> & lt; / body> & lt; / html> 第五步:-跑步并享受 现在尝试点击“Heavy/SomeHeavyMethod”并查看输出。我建议您度量“线程排队”,以了解异步控制器的好处。观看本视频,了解如何度量“排队的线程”http://www.youtube.com/watch?v=wvg13n5V0V0。 第五天是什么? 还在努力。 最后,你可以观看我关于WCF、Silver light、LINQ、WPF、设计模式、实体框架等不同章节的c#和MVC培训视频。请不要错过我的。net和c#面试问题和答案手册。 用于与各种主题相关的技术培训,包括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 你对MVC是全新的吗? 如果你是一个全新的人,我建议从以下4个视频开始,大约10分钟,这样你就可以快速进入MVC。 实验1:-一个简单的Hello world ASP。净MVC应用程序。 实验2:在这个实验中,我们将看到如何使用视图数据在控制器和视图之间共享数据。 实验3:在这个实验中,我们将创建一个简单的客户模型,用一些数据进行处理,并在视图中显示相同的数据。 实验4:在这个实验中,我们将创建一个简单的客户数据输入屏幕,并在视图上进行一些验证。 本文转载于:http://www.diyabc.com/frontweb/news1884.html

posted @ 2020-08-08 10:05  Dincat  阅读(126)  评论(0编辑  收藏  举报