仓酷云

标题: ASP.NET网页设计浅谈ASP.NET MVC 3中怎样利用Model [打印本页]

作者: 飘飘悠悠    时间: 2015-1-16 22:20
标题: ASP.NET网页设计浅谈ASP.NET MVC 3中怎样利用Model
今天去面试,被问到C#中的new关键字,看了那么多的书对new关键字还是有一定认识,回来又把new复习了一遍,发现了许多以前还不知道的细节。<p>今天博客发了新文章,讲一下我对怎样利用MVC中的Model的意见,不是甚么年夜手艺,当是一个手艺会商^^
原文地点:http://www.youguanbumen.net/Article.aspx?id=79
原文:
前两天写了个文章ASP.NETMVC3——Model远程考证,次要纪录了一下ASP.NETMVC3中新增的RemoteAttribute类的利用,得益于这个类,我们能够在模子中为属性设置客户端远程校验的营业,文章中给了出一个复杂的实体类MyUser_Add,举了一个最多见的注册用户时考证用户名是不是存在的例子,最初乐成地对用户名完成了用ajax加薪校验的功效。给出Model的代码以下:
  1. ///<summary>///用户增加操纵的模子///</summary>publicclassMyUser_AddModel{#regionMyRegion///<summary>///用户名///</summary>[DisplayName("登录账号")][Required(ErrorMessage="用户账号不克不及为空")][Remote("CheckUserAccountExists","Test",ErrorMessage="用户账号已存在")]//远程考证(Ajax)publicstringUserAccount{get;set;}}
复制代码
文章发到博客园下面以后有伴侣提出一了一点:“这个我们能够以为在创立的时分办理反复成绩,可是假如是Update的话,我信任如许的语句应当也会报毛病的”。就是说假如这个Model用于做Update操纵的时分,校验用户名是不是存在的办法和Add操纵会有点分歧,由于要把本人扫除在外,比方本来的用户名叫”user1“修正后还叫”user1“,这时候候判别用户名是不是存在的尺度是”假如存在用户名是‘user1’的而且用户ID号不是以后这个要修正的用户,那末用户不成用(存在)“,而Add操纵的时分不存在”本人“,以是我看能够了解为两个操纵都必要判别用户名是不是存在,可是利用了分歧的战略!
恰好之前看了ASP.NETMVC3自带的Demo(就是创立MVC3.0项目后天生的谁人--!),想写一下我本人以为的”微软但愿我们怎样往计划MVC中的Model”的意见,发明仿佛和这个成绩有点接洽,以下是我团体的概念:
起首我们看下Demo项目中Models目次下的AccountModels.cs,上面的代码摘自这个文件中的两个我以为很有代表性的类,都是和用户有关的,源代码以下:
  1. publicclassLogOnModel{[Required][Display(Name="Username")]publicstringUserName{get;set;}[Required][DataType(DataType.Password)][Display(Name="Password")]publicstringPassword{get;set;}[Display(Name="Rememberme?")]publicboolRememberMe{get;set;}}publicclassRegisterModel{[Required][Display(Name="Username")]publicstringUserName{get;set;}[Required][DataType(DataType.EmailAddress)][Display(Name="Emailaddress")]publicstringEmail{get;set;}[Required][ValidatePasswordLength][DataType(DataType.Password)][Display(Name="Password")]publicstringPassword{get;set;}[DataType(DataType.Password)][Display(Name="Confirmpassword")][Compare("Password",ErrorMessage="Thepasswordandconfirmationpassworddonotmatch.")]publicstringConfirmPassword{get;set;}}
复制代码
注重下面两个类的类名,我们很简单读懂一个是“(用户)登录模子”,一个是“(用户)注册模子”,成心思的中央在于两个类都用UserName、Password两个属性,UserName的考证体例完整一样,而Password有所分歧,RegisterModel中多了一个ValidatePasswordLengthAttribute的特征——一个自界说考证特征。这两个模子对应的是分歧的Action-View,因而我的了解是:Model是为了Actioin-View而存在的。比方,有一个页面是用来显现一张表单,这张表单会被提交到一个先容Post哀求的Action中,这时候候就会创立一个和这个表单对应的Model,用来在View和Action中充任前言的感化(所谓的“实体传参”)。
回到下面谁人检测用户名是不是存在的成绩,基于这个设法能够得出一个办理计划,那就是创立别的一个新类,叫做MyUser_UpdateModel(用户修正模子),能够得出以下的代码
  1. publicclassMyUser_UpdateModel{///<summary>///用户名///</summary>[DisplayName("登录账号")][Required(ErrorMessage="用户账号不克不及为空")][ValidateUserAccountAttribute]//自界说考证[Remote("CheckUserAccountExistsForUpdate","Test",ErrorMessage="用户账号已存在")]//远程考证(Ajax)publicstringUserAccount{get;set;}}
复制代码
注重到远程考证挪用的是别的一个Action,这个Action的代码以下:
  1. ///<summary>///用于考证用户账号是不是存在的Action(Update操纵时利用)///</summary>///<paramname="UserAccount">用户账号</param>///<returns></returns>[HttpGet]publicActionResultCheckUserAccountExistsForUpdate(stringUserAccount){varms=ModelState;string[]existsUsers={"wodanwojun"};boolexists=string.IsNullOrEmpty(existsUsers.FirstOrDefault(u=>u.ToLower()==UserAccount.ToLower()))==false;returnJson(!exists,JsonRequestBehavior.AllowGet);}publicclassMyUser_UpdateModel{///<summary>///用户名///</summary>[DisplayName("登录账号")][Required(ErrorMessage="用户账号不克不及为空")][ValidateUserAccountAttribute]//自界说考证[Remote("CheckUserAccountExistsForUpdate","Test",ErrorMessage="用户账号已存在")]//远程考证(Ajax)publicstringUserAccount{get;set;}}
复制代码
这里假定要修正的用户的用户名叫做“youguanbumen”,以是考证的时分假如输出了有关部门是不该该提醒“该账号已存在”的(由于就是他本人,用了这个账号是没成绩的)。把持器的代码我就不写咯,大抵就是失掉一个用户名叫做“youguanbumen”的Model——MyUser_UpdateModel类,然后经由过程returnView(objectmodel)办法丢给View(固然,View是强范例的——MyUser_UpdateModel类),测试了局截图以下:
1、输出“wodanwojun”作为用户名,发明通不外,就像上面这张截图如许,缘故原由请见下面的代码!
ASP.NET网页设计浅谈ASP.NET MVC 3中怎样利用Model
登录/注册后可看大图

2、输出“youguanbumen”作为用户名。发明没有毛病提醒,就像上面这张截图如许,缘故原由请见下面的代码,并对比前一篇文章中别的一个用于远程校验的Action的代码!
ASP.NET网页设计浅谈ASP.NET MVC 3中怎样利用Model
登录/注册后可看大图

总结一下:仿佛写出来的每篇文章都不短可是讲的器材都很少,呵呵,请别介怀^_^。固然写代码的履历很未几,可是团体关于代码仍是有一些本人的意见的。选择一个框架来开辟一个体系,就意味着在开辟的过程当中你必要遵守某些商定好的器材,比方选择WebForm来开辟体系,就只管的承受”事务响应“和服务器端控件;选择了MVC就要承受把C#代码嵌到页面往的这个现实,固然假如利用了某些RIA框架后大概不呈现这类情形(由于页面上的器材基础都是异步哀求返来的)。出格是多人开辟的时分,我们有需要遵守某些套路来写代码,比方下面这个例子,大概写Model、写View和写Action是三个分歧的人来完成的时分,“假如遵守这一个Action会有一个Model来撑持它”的这类套路来走的话,每一个人都很简单找到代码的动手点,写View的人晓得怎样往声明页面为强范例(他会往找相干的Model),写Action的人晓得returnView(objectmodel)中的model是啥,也晓得用于处置Post的Action的参数是甚么,写Model的人必要很懂得营业,晓得哪些字段是必填的,那些字段有长度限定等等,可是他大概不晓得这个Model会被拿往怎样展现!
ASP.NETMVC中的Model是和营业严密相干的,有甚么样的营业需求就会发生甚么样的Model,而且会有响应的Action来出来它,有响应的View来展现它。假如基于这个设法来开辟体系的话,很有大概得出如许一个扼要的开辟流程:研讨营业-->转化为对应的Model,依据营业需求对Model的属性设置考证特征-->计划数据库表来对数据举行寄存(大概是xml也纷歧定)-->计划View来展现它,计划Action来处置它......。
原文链接:http://www.ckuyun.com/serafin/archive/2011/01/27/1945934.html
【编纂保举】
既然话题已经抄起,我打算今晚发篇博文再引导一下舆论方向,使它再火两天,抛砖引玉,而且赵劼先生一直在跟帖,使.NET阵营的我感到万分难得。
作者: 第二个灵魂    时间: 2015-1-18 08:50
由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。
作者: 山那边是海    时间: 2015-1-21 16:14
Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。
作者: 冷月葬花魂    时间: 2015-1-30 20:51
有一丝可惜的是,这个系列太强了,Java阵营的朋友根本就是哑口无言...争论之火瞬间被浇灭,这不是我想这么早就看到的,但是值了。
作者: 只想知道    时间: 2015-2-16 23:30
ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。
作者: 愤怒的大鸟    时间: 2015-3-5 12:48
虽然在形式上JSP和ASP或PHP看上去很相似——都可以被内嵌在HTML代码中。但是,它的执行方式和ASP或PHP完全不同。在JSP被执行的时候,JSP文件被JSP解释器(JSPParser)转换成Servlet代码,然后Servlet代码被Java编译器编译成.class字节文件,这样就由生成的Servlet来对客户端应答。所以,JSP可以看做是Servlet的脚本语言(ScriptLanguage)版。
作者: 小魔女    时间: 2015-3-12 07:13
ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。
作者: 蒙在股里    时间: 2015-3-19 18:40
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2