|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
今天去面试,被问到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的代码以下:- ///<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,上面的代码摘自这个文件中的两个我以为很有代表性的类,都是和用户有关的,源代码以下:- 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(用户修正模子),能够得出以下的代码- publicclassMyUser_UpdateModel{///<summary>///用户名///</summary>[DisplayName("登录账号")][Required(ErrorMessage="用户账号不克不及为空")][ValidateUserAccountAttribute]//自界说考证[Remote("CheckUserAccountExistsForUpdate","Test",ErrorMessage="用户账号已存在")]//远程考证(Ajax)publicstringUserAccount{get;set;}}
复制代码 注重到远程考证挪用的是别的一个Action,这个Action的代码以下:- ///<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”作为用户名,发明通不外,就像上面这张截图如许,缘故原由请见下面的代码!
2、输出“youguanbumen”作为用户名。发明没有毛病提醒,就像上面这张截图如许,缘故原由请见下面的代码,并对比前一篇文章中别的一个用于远程校验的Action的代码!
总结一下:仿佛写出来的每篇文章都不短可是讲的器材都很少,呵呵,请别介怀^_^。固然写代码的履历很未几,可是团体关于代码仍是有一些本人的意见的。选择一个框架来开辟一个体系,就意味着在开辟的过程当中你必要遵守某些商定好的器材,比方选择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阵营的我感到万分难得。 |
|