随笔-19  评论-486  文章-1  trackbacks-13
    用ASP.NET MVC快一星期了,之前是苦苦的等待,之后是苦苦的摸索和总结,现在这个MVC在我脑子里已经有了个大体的评价,写出来与大家分享。
    关于MVC本身的优点,就不再详述,地球人说了好多了。
    所以我光说说微软的ASP.NET MVC Framework(目前还非正式发布版本,为CTP版)的一些个人感受。
    这里先确定一个个人的感情基调:我对.NET3.5绝对拥护,对MVC绝对期待。正因为如此,对里面的不足我会不遗余力地和大家分析探讨。

    首先,ASP.NET 引入MVC这个模块不本身不能算是3.5的什么“独门绝技”,也不用因为使用了MVC而对.NET3.5大加赞赏(没有贬义),因为MVC(以下说的MVC都是ASP.NET MVC Framework CTP版)的引入只能说明ASP.NET向更合理、更顺应企业级的开发模式潮流又进了一步,其模式是早就存在的(我不太愿意说谁抄谁的话,也不关心,对我们来说好用就行)。甚至从这个角度上来说MS已经慢了半拍。之所以说是进步,至少MVC的出现解决了我认为ASP.NET在客户体验和模式上的3大不足:
   
    一、网页生命周期过长(那是相当的长)。
    二、与第一点相关的,“巨无霸”VIEWSTATE以及PostBack功能大大增加了用户流量,使得客户体验大大降低(这里不讨论Ajax的弥补作用,光说最基本的WebForm模式,不然有很多可以引起技术争论的地方)
    三、服务器控件自动生成的客户端ID,使得开发人员对客户端页面控制(如使用js)太吃力。不得不一天到晚和.ClientID打交道,效率也太低。
    
    所以有人说MVC具有里程碑式的意义,这点我赞同。
    下面来说说这一周不到的时间内我发现了MVC哪些值得改进和需要注意的地方。
   
    一、
不是MVC本身不足,而是 Scott Guthrie 在他的教程(包括示例源码)中有点误导地球人,他普遍使用了这样的格式(下面说的这种方式需要用到MVCToolkit.dll,这里有下载http://asp.net/downloads/3.5-extensions/MVCToolkit.zip,目前vs2008和MVC CTP没有提供):
    

    大家注意Html.ActionLink()里面的"Action="后面,他使用的是字符串常量"Edit"和"New",这是Controller层中的一个方法,用于控制网页行为。第一次看到这个,我简直有点气愤——.net3.5在面向对象上面花了那么大功夫,到他手里怎么还要这样引用?这也叫面向对象?况且这比起原始的Codebehinde更不利于程序员和美工的协调。让我感觉大楼快封顶的时候,决定用草棚做顶。两个字——失望。
    
    二、不过我信心马上又来了,我看到了ActionLink提供了另外一种使用范型的方法ActionLink<T>,并且找到了一篇ASP.NET MVC Preview: Using The MVC UI Helpers 的文章(强烈建议大家作为基础看看),看到了ActionLink<T>的使用已经另外一些ScottGu没有提到的方法。
    比如Button<T>是这样使用的:
<%=Html.Button<HomeController>(x=>x.Index(),“cmdNav2″,“Home”) %>
    用Lambda表达式x=>x.Index()取代了生硬的"Index"。
    于是我开始coding……几秒钟后,让我失望的事又发生了……
    当我输到x=>x.的时候,后面的再也出不来了,看来又是一个bug!
    起初我以为这只个是MVC调用功能上的bug,是不是这个功能他们还没有做好?
    后来TT.NET发现其实Button<T>不是不能调用,只是不能显示,如果先把后面的内容输好,再完成Lambda是可以.出来的!松了一口气,但这还是MVC或者是VS2008显示上的一个bug。

    补充一下:TT.NET刚才跟我说,不是所有的ctl<T>都不能使用Lambda来自动完成,比如Html.Form<>就是可以的,那应该可以更加肯定是MVC或者说是MVCToolkit的bug了。——2007.12.18 14:2

    三、在调试的时候发现,即使你在输入
<%=Html.Button<HomeController>(x=>x.Index(),“cmdNav2″,“Home”) %>
    的时候,忘了输入最后一个),编译也不会报错(这个问题可能属于vs本身检测机制的问题),而是到打开网页的时候,运行时错误,虽然不是大问题,细心的程序员都会自己看一遍,但是由于是在.aspx中编写,貌似就享受不到linq在.cs中编译时就检查出错误的那种“舒适”。当然话说回来,MVC是不提倡在View层使用这些Controller层的命令的,但终归是个遗憾。

    四、我们有时候需为了简化网页流程和减少代码页,往往把插入新纪录和编辑区域合为一体,即同样一组TextBox输入框,在一个变量或者控件的控制下,可以转换“Insert”或者"Update"的功能。这是一种不错的思路,也免去了这一组“TextBox”该不该复用的思想斗争以及复用之后一系列繁琐的操作(即使有些MVC观点似乎更提倡分开表示)。当你修改的时候,由ViewData传入一个Entity,Entity里面是某条记录的所有值,这时候赋给TextBox显示是没有问题的,问题就出在这个页面需要我们执行"Insert"的时候,我们往往会传入一个空的Entity(如:SzwEntity szwEntity= new SzwEntity();),这时候麻烦来了,如果你使用O/RM设计并且里面有string字段的话会发现一运行就报错,我找了半天总算找到了原因:在.dbml(O/RM文件)下面的.designer.cs中,定义publish string str;的时候,并没有按照我SQL数据库中Default 'xxx'赋予初始值,当我们SzwEntity szwEntity= new SzwEntity();的时候,里面所有的string字段都为null,这当然不能为Html.TextBox()等作为value显示,此时int反而没事,因为int初始默认值已经是0了。
    因此目前最好的解决办法就是在.designer.cs中给他们赋一个初始值,比如:
        private System.DateTime _EndTime=DateTime.Now;
        
        
private string _UserName=string.Empty;

    他们原本是这样的:
        private System.DateTime _EndTime;
        
        
private string _UserName;


    这应该是算VS2008和MVC配合上出了点小问题。如果分来开看,或许倒不算什么bug,反而有他们各自的用意和规范在里面。

    五、我觉得最头疼的一个问题,应为在MVC技术层面上似乎还不那么好解决:打开MVC的Global.asax,我们可以看大哦这样一句话:

            // Note: Change Url= to Url="[controller].mvc/[action]/[id]" to enable 
            
//       automatic support on IIS6 

    就是说,如果你用的是IIS6(WindowsXP/2003)的话,你就势必要使用[controller].mvc/[action]/[id]的格式,而不能“享用”[controller]/[action]/[id]了。最大的问题倒不是在美观和这种格式可读性的初衷上面,而是在以下两个方面:
    1、如果到时候系统升级到IIS7(Windows2008/Vista),所有外部的链接是不是还能访问带".mvc"的路径,这面临着一个兼容性的考验。
    2、了解Search engine robots 工作原理的朋友肯定都知道,我们当初煞费苦心把.aspx/asp/php/jsp“伪装”成.html是为了什么。对,就是为了让Search engine robots能有对这些.html产生“好感”,便于收录和打分,而现在的.mvc算什么?Search engine robots是不是可能会把.mvc后面的当做网页参数,把.mvc当成文件扩展名?如果我的假设成立,天,那.mvc的遭遇岂不是很悲惨?不知道Search engine robots是否会看到.mvc之后,久久崇拜一番然后一声叹息扬长而去。


    以上是我用了MVC之后,发觉的比较重要和“隐藏的够深”的一些问题,不涉及整体框架的不足(比如用{$}替换机制等等)。还有一些显示上的问题可能和VS2008本身有关,待我确认是MVC的问题之后,我会都发上来,如果大家还发现了别的什么问题,希望一同交流,我会一并整理进来,方便大家参考!

    前途是光明的,道路是曲曲折折的 LIKE THIS~~~~~~~~haha  only a joke

http://szw.cnblogs.com/
研究、探讨ASP.NET
转载请注明出处和作者,谢谢!

posted on 2007-12-18 12:35 SZW 阅读(3522) 评论(58)  编辑 收藏 所属分类: ASP.NET MVC

评论:
#1楼  2007-12-18 12:46 | 韩现龙      
楼主所言极是,不知是小弟才疏学浅还是MS MVC的问题,我在.cs页面无法引用.aspx页面上的runat="server"的控件。。这真让我郁闷又气愤!!
还有,Scott写的关于MVC的一篇文章上的关于对Detail这个方法的单元测试,我在本地却没有TestViewEngine这个对象。。。
  回复  引用  查看    
#2楼  2007-12-18 12:48 | 左手倒影 [未注册用户]
顶一下,支持TNT的研究
  回复  引用    
#3楼  2007-12-18 12:49 | .progame [未注册用户]
asp.net mvc的框架设计可以带给我们很多借鉴 如何在灵活性 易用性上取舍 如果能够更好地充分地利用.net的特性 整体给人的感觉是简洁 清新 但不失灵活和强大
  回复  引用    
#4楼  2007-12-18 12:56 | Jeffrey Zhao      
看了之后……
1、我想我会写一篇文章为WebForm进行辩解。
2、IIS6里加上wildcard isapi mapping难道还不行吗?IIS 7也就是比IIS6多了个管道模式,可以用托管HttpModule来进行处理吧。
  回复  引用  查看    
#5楼  2007-12-18 13:00 | 没剑      
--引用--------------------------------------------------
韩现龙: 楼主所言极是,不知是小弟才疏学浅还是MS MVC的问题,我在.cs页面无法引用.aspx页面上的runat=&quot;server&quot;的控件。。这真让我郁闷又气愤!!
还有,Scott写的关于MVC的一篇文章上的关于对Detail这个方法的单元测试,我在本地却没有TestViewEngine这个对象。。。
--------------------------------------------------------
你既然用MVC就不要还想着在cs上用控件...如果你想用服务端控件的话还是用回webform好了
  回复  引用  查看    
#6楼 [楼主] 2007-12-18 13:01 | SZW      
@韩现龙
关于你说的第一个问题,MVC好像确实不提倡在.cs里面控制前台控件,所以你看Scott以及官方的代码,都是在aspx里面完成的(这一点却是让我感觉到了回到了asp时代,呵呵当然功能上不能同日而语),并且MVC还提供了整合DynamicData的一系列控件,可以简化很多以前在.cs里面的操作。这一点观念一定要改变过来。
关于你说的第二个问题,你可以参考下这个帖子:http://forums.asp.net/t/1192080.aspx
里面有一些讨论,并有提供下载
希望对你有用。
  回复  引用  查看    
#7楼 [楼主] 2007-12-18 13:04 | SZW      
@Jeffrey Zhao
1、首先支持你写。其次我没有否定掉WebForm,但很遗憾他的缺点客观存在。
2、如果在MVC框架内可以的话,为什么他们要多此一举呢?当然你说的方法我也想到过,毕竟是用的最普及的,目前忙于测试开发,没来得及尝试,只是在推理上小否定了一下,如果你测试成功了,我们可以好好交流一番^_^
  回复  引用  查看    
#8楼  2007-12-18 13:05 | Spring.Cheung      
实在不行,就等Monorail小组来扩展吧
  回复  引用  查看    
#9楼  2007-12-18 13:07 | 韩现龙      
--引用--------------------------------------------------
没剑: --引用--------------------------------------------------
韩现龙: 楼主所言极是,不知是小弟才疏学浅还是MS MVC的问题,我在.cs页面无法引用.aspx页面上的runat=&amp;quot;server&amp;quot;的控件。。这真让我郁闷又气愤!!
还有,Scott写的关于MVC的一篇文章上的关于对Detail这个方法的单元测试,我在本地却没有TestViewEngine这个对象。。。
--------------------------------------------------------
你既然用MVC就不要还想着在cs上用控件...如果你想用服务端控件的话还是用回webform好了
--------------------------------------------------------

兄台误解了,不知你是否读了ScottGu的这篇博客,http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx
在Scott讲解的时候,有一个对比的例子,说既可以在Aspx页面上写inline代码,又可以用绑定的方式显示数据,并且举例子用listview来显示。
就是此处出了问题。


  回复  引用  查看    
#10楼  2007-12-18 13:10 | 韩现龙      
@SZW
这篇文章上的:
http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx
此处:
Rendering Approach 2: Using Server Side Controls

并且根据Scott的贴图,用的就是绑定的方式。

  回复  引用  查看    
#11楼 [楼主] 2007-12-18 13:11 | SZW      
@韩现龙
确实,他提供了两种方法,只不过放弃在.cs绑定是MVC趋势,并且更能体现MVC的本质。
  回复  引用  查看    
#12楼  2007-12-18 13:14 | 韩现龙      
@SZW
我也同意这个观点,只是让我郁闷的是为什么Scott提供的第二种绑定方法不好使,在cs页根本就找不到控件。
  回复  引用  查看    
#13楼  2007-12-18 13:38 | TakWai [未注册用户]
Html.ActionLink<T>

ScottGu 在 MVC 文章系列里面的 "URL路径选择" 就提到过了。 用这方法编译时就可以检查,还有自动提示。
  回复  引用    
#14楼 [楼主] 2007-12-18 13:51 | SZW      
@TakWai
Html.ActionLink<T>我提到了后面是看到他用了,我先看得是下载的CTP配套的源代码,很惊讶他为什么用Html.ActionLink()的方法。
关于你说的第二点,我没记错的话,那篇文章是在CTP发部以前一两个星期就发表了,你不要被图片迷惑,CTP版本的不能从左到右被.出来(或者说是MVCToolkit的问题)。并且格式也发生了变化,Lambda是显示在第一个参数。至少在我这里和很多我所知道的朋友那里都不能,难道你的可以?
  回复  引用  查看    
#15楼  2007-12-18 13:54 | henry      
一 
并不是什么系统的UI都需要和美工协助,这样提供别一个种方式进行HTML输出是很正常不过的事情.


当你的项目有足够大(其实只要几十个page+几个项目工程)的时候随便添加<%%>代码块,足以让你的代码感知几十秒内无效.


这个VS2003和2005就存在问题.
  回复  引用  查看    
#16楼  2007-12-18 13:57 | TerryLee      
@韩现龙
找不到控件目前是一个Bug,Express版本下在.cs文件中可以找到控件
  回复  引用  查看    
#17楼  2007-12-18 13:57 | rockshit      
现在是mvc 预览版本,功能只是一个展示性的东西
到正式版发布的时候,一定会有很多变化的。
ajax 从预览版本到正式版本之间的变化非常明显
我想,微软的mvc会越来越明朗的,不然castle还虎视眈眈的对着mvc呢,但是一个屁都没说。
我想你新太急了。
  回复  引用  查看    
#18楼  2007-12-18 13:58 | TT.Net      
支持下~
  回复  引用  查看    
#19楼 [楼主] 2007-12-18 14:05 | SZW      
@henry
一、我说的不是用不用,而是用什么方法,Scott也说了提倡使用范型+Lambda的方法,而他的代码里面却没有用,用了"Edit"表示,这是我说的“误导”的地方之一,可能是我已开始说的还不够明白,在此补充一下,见谅。

二、我的工程是刚建的,不存在你的假设,毕竟bug和感知能力是两码事。

三、这个我认同,也是我一直以来觉得比较不爽的地方。我在这里只是说这个bug对于linq和Lambda的“优点”来说,是一种损失,毕竟目前给出的这个MVC框架对linq和Lambda还是有依赖的。
  回复  引用  查看    
#20楼 [楼主] 2007-12-18 14:11 | SZW      
@rockshit
对现在的这个MVC CTP版本说“展示”不如说“收集bug”,见Scott的blog。
譬如:“
The next CTP is switching to use { } brackets instead of square ones. Just saw the bug fix go in tonight. :-)


我在前面已经说明过我的感情基调,暴露问题不等于要弄糗他,而是共同进步。
我也很期待正式版本会是什么样子,我等的时间够久了。
  回复  引用  查看    
#21楼  2007-12-18 14:18 | henry      
@SZW
呵呵,那并不是假设,不过你应用一下就知道情况的确如此(在自己的框架下一直这么干,所以希望到正式版有所提升).
当然也不排除我的电脑配置差了点(e4300+2G)
  回复  引用  查看    
#22楼  2007-12-18 14:28 | Jeffrey Zhao      
@SZW
目前的情况是客观的错误被扩大化了,还有你试一下吧,我目前没有时间玩MVC框架……
  回复  引用  查看    
#23楼 [楼主] 2007-12-18 14:30 | SZW      
@henry
我说的是:我的工程是刚建的,不存在你的假设

需要我解释一下吗?
我的工程是用VS2008默认的MVC框架创建的,不存在你所说的“几十个page+几个项目工程”的假设,在这种情况下,已经.不出来了,所以说是bug,而不是智能感知效率的问题。

PS:"不存在你的假设"的主语是"我的工程",并且此处"不存在你的假设"和“你的假设不存在”是不一样的,可能您理解为后一种了
  回复  引用  查看    
#24楼 [楼主] 2007-12-18 14:39 | SZW      
@Jeffrey Zhao
我把那个我们起先都想到的方案“小否定”,是我猜想到:IIS6的HttpModule判断机制,是建立在有一个明确的文件基础上的,而MVC默认的不同(或者说IIS7支持这样的模式),是通过这个URL参数,查找到对应事件,然后由RenderView之类的命令转向网页。在IIS6中,设定.mvc就相当于虚拟了一个文件。这可能就是PostBack在MVC不能使用的原因之一。因为对IIS7没有研究,所以只是猜想,但我说的机制是MVC确实在用的。

另外十分感谢你的建议!^_^
  回复  引用  查看    
#25楼  2007-12-18 14:59 | STS [未注册用户]
不知道Win2003是什么IIS版本.
反正我在IIS上配置了wildcard application maps . 就能使用任意的Url.

但是这里需要一些技巧.
因为需要在MapHandler之前RewritePath一次,
好让MapHandler的过程能返回自定义的Handler.


  回复  引用    
#26楼  2007-12-18 15:17 | Jeffrey Zhao      
@SZW
没有,IIS6可以设置不判断文件是否访问,我说的wildcard mapping就是把所有请求交给asp.net。
  回复  引用  查看    
#27楼  2007-12-18 15:51 | 阿不      
@楼主
与Jeffrey Zhao的观点一样,我觉得你过份的夸大的WebForm的不足的影响了,或者说,你不应该以这三点不足做为引子,来引出asp.net mvc的历史作用。我目前也没有时间研究mvc,但是总体给我的感觉,它是在.net平台下,web框架的一种补充。
对你所提的三个不足,我想后两点我会接受。但是MVC可不是为了解决这些问题而出现的。它所提倡的TestDriven,才是它的灵魂。我相信你以后在深入使用以后,也会发现它的一些不足的。

  回复  引用  查看    
#28楼  2007-12-18 16:28 | 怪怪      
@Jeffrey Zhao
我就不应该注册, 我感觉我都不敢说话了, 虽然总觉得憋着什么呢, 也不完全是不敢说, 车轱辘话, 说起来也没意思了... :(

  回复  引用  查看    
#29楼  2007-12-18 16:32 | 怪怪      
Web MVC的优势之一是看待网站结构的角度, 这些优势ASP.NET MVC还是有的. 不过目前的实现至少现在只有简陋二字可以形容, 跟其它平台上的Web MVC相比, 完全没有竞争优势可言, 独特性也不具备, 说白了如果这个东西是院子里的同志, 比如我吧, 花半年写的, 哪怕也标上alpha/beta, 恐怕只能遭人骂.
  回复  引用  查看    
#30楼  2007-12-18 17:02 | Mic [未注册用户]
哈!MVC挺好的。
.mvc问题吗,我的没改运行怪好的呀(iis6)
至于.cs里无法写代码,这个问题吗可以理解可以不理解。其实稍活下什么都好解决,写在.aspx里没什么不好的,无非就是些数据绑定顶多几行。如果.aspx里的代码写的还真不少那你就要考虑自己V了吗?哈哈
  回复  引用    
#31楼  2007-12-18 17:25 | 偶卖糕的      
不咋地
  回复  引用  查看    
#32楼  2007-12-18 17:30 | 第一控制.NET      
我觉得要没有listview我真不会用控件绑定了,因为clean html是个很麻烦的工作,用cssfriendly那个玩意实在不爽。
但是有了listview也没必要在mvc里这么排斥控件绑定了。
  回复  引用  查看    
#33楼 [楼主] 2007-12-18 17:32 | SZW      
--引用--------------------------------------------------
阿不: @楼主
与Jeffrey Zhao的观点一样,我觉得你过份的夸大的WebForm的不足的影响了,或者说,你不应该以这三点不足做为引子,来引出asp.net mvc的历史作用。我目前也没有时间研究mvc,但是总体给我的感觉,它是在.net平台下,web框架的一种补充。
对你所提的三个不足,我想后两点我会接受。但是MVC可不是为了解决这些问题而出现的。它所提倡的TestDriven,才是它的灵魂。我相信你以后在深入使用以后,也会发现它的一些不足的。

--------------------------------------------------------

我同意你“但是MVC可不是为了解决这些问题而出现的”这句话,我也没有说MVC就是为了这个才出现的。但是ASP.NET MVC的结构确实解决了(你也可以说顺带解决了)这3个“先天不足”,说这3个是“先天不足”我也并没有“鄙视”的意思,毕竟我也是看中了WebForm才选择了asp.net而不是jsp。
至于你说的MVC的不足,以后肯定还能发现更多,我这里也没有迷信MVC的意思,甚至我敢说也不是微软的每一项技术生命力都是很强的(比如当初提出来的在URL里面放Session的功能,叫什么来着?)。期待MVC的表现吧,呵呵
  回复  引用  查看    
#34楼  2007-12-18 17:34 | Q.Lee.lulu      
--引用--------------------------------------------------
韩现龙: 楼主所言极是,不知是小弟才疏学浅还是MS MVC的问题,我在.cs页面无法引用.aspx页面上的runat=&quot;server&quot;的控件。。这真让我郁闷又气愤!!
--------------------------------------------------------
解决办法很简单,看我BLOG的
http://www.cnblogs.com/QLeelulu/archive/2007/12/12/992660.html
  回复  引用  查看    
#35楼 [楼主] 2007-12-18 17:34 | SZW      
--引用--------------------------------------------------
怪怪: Web MVC的优势之一是看待网站结构的角度, 这些优势ASP.NET MVC还是有的. 不过目前的实现至少现在只有简陋二字可以形容, 跟其它平台上的Web MVC相比, 完全没有竞争优势可言, 独特性也不具备, 说白了如果这个东西是院子里的同志, 比如我吧, 花半年写的, 哪怕也标上alpha/beta, 恐怕只能遭人骂.
--------------------------------------------------------
“简陋”两个字归纳的真好
  回复  引用  查看    
#36楼  2007-12-18 18:23 | 阿不      
--引用--------------------------------------------------
我同意你“但是MVC可不是为了解决这些问题而出现的”这句话,我也没有说MVC就是为了这个才出现的。但是ASP.NET MVC的结构确实解决了(你也可以说顺带解决了)这3个“先天不足”,说这3个是“先天不足”我也并没有“鄙视”的意思,毕竟我也是看中了WebForm才选择了asp.net而不是jsp。
至于你说的MVC的不足,以后肯定还能发现更多,我这里也没有迷信MVC的意思,甚至我敢说也不是微软的每一项技术生命力都是很强的(比如当初提出来的在URL里面放Session的功能,叫什么来着?)。期待MVC的表现吧,呵呵
--------------------------------------------------------
我也认为,多一种选择就可以多一种让人选择.NET的理由。这对.NET技术的发展是有利的。
我们只能以辩证的眼光来看待各种新技术。
你说的应该是在url中带sessionID吧?
  回复  引用  查看    
#37楼 [楼主] 2007-12-18 18:43 | SZW      
@阿不
--引用--------------------------------------------------
我也认为,多一种选择就可以多一种让人选择.NET的理由。这对.NET技术的发展是有利的。
我们只能以辩证的眼光来看待各种新技术。
你说的应该是在url中带sessionID吧?
--------------------------------------------------------

对,用URL部分替代Cookie身份验证的,我真的忘了那具体叫什么,反正一开始就没打算用,后来真的成为历史了,不管是不是暂时的。但是那个思路可以借鉴到别的很多地方。

“我们只能以辩证的眼光来看待各种新技术。”完全同意!
  回复  引用  查看    
#38楼  2007-12-18 18:55 | GSpring      
写的不错,支持
  回复  引用  查看    
#39楼  2007-12-18 19:52 | Clingingboy      
@韩现龙
要把页面转换一下就可以了.不然无法使用,算是一个bug
  回复  引用  查看    
#40楼  2007-12-18 20:39 | 韩现龙      
@Clingingboy
对,我找到[au]Q.Lee.lulu[au]的解决方案了。
http://www.cnblogs.com/QLeelulu/archive/2007/12/12/992660.html
  回复  引用  查看    
#41楼  2007-12-18 21:48 | Jeffrey Zhao      
@阿不
其实这三个不足我并没有发现造成什么困难了,呵呵……
  回复  引用  查看    
#42楼  2007-12-19 00:47 | Jeffrey Zhao      
@怪怪
对我说。:)
  回复  引用  查看    
#43楼  2007-12-19 09:39 | BoyLee      
我不太愿意说谁抄谁的话,也不关心,对我们来说好用就行
=============================================
这句好
  回复  引用  查看    
#44楼  2007-12-19 09:44 | 膘悍 [未注册用户]
对于最后一个问题,我的解决方法是,把"[controller].mvc/[action]/[id]"表达式书写成"[controller]/[id]/[action].aspx"
我测试过,这样写没有问题,当然写成"[controller]/[action]/[id].aspx"也可以,只要最后是交给ASP.NET的ISAPI处理就行。
  回复  引用    
#45楼  2007-12-19 10:04 | Prolove      
找到我想要的答案,谢谢
  回复  引用  查看    
#46楼  2007-12-19 10:05 | Coffeebean      
--引用--------------------------------------------------
Prolove: 找到我想要的答案,谢谢
--------------------------------------------------------
我也是
  回复  引用  查看    
#47楼 [楼主] 2007-12-19 11:49 | SZW      
@膘悍
太棒了!你的办法确实可以,十分感谢!
(那是不是有就点像 http://weblogs.asp.net/ 上面的方式呢,总之.aspx结尾总比.mvc好,嘿嘿!)
  回复  引用  查看    
#48楼  2007-12-19 12:10 | Ray Zhang      
不过其实ASP.NET MVC和WebFrom以后将有不同的细分应用场景
我已经总结了你的部分意见并发给了ASP.NET MVC开发团队并抄送给了Scott.

老赵如果有什么意见也可以发给我。
  回复  引用  查看    
#49楼 [楼主] 2007-12-19 12:55 | SZW      
@Ray Zhang
十分感谢!
  回复  引用  查看    
#50楼  2007-12-19 17:00 | 膘汉 [未注册用户]
@SZW
呵呵,我也是看到有人说要在IIS6上添加mvc扩展名交给asp.net的isapi处理才想到的。
再修改一下,把html扩展名交给asp.net的isapi处理就可以写成下面这样了。
[controller]/[action]/[id].html
  回复  引用    
#51楼 [楼主] 2007-12-19 19:29 | SZW      
@膘汉
--引用--------------------------------------------------
膘汉: @SZW
呵呵,我也是看到有人说要在IIS6上添加mvc扩展名交给asp.net的isapi处理才想到的。
再修改一下,把html扩展名交给asp.net的isapi处理就可以写成下面这样了。
[controller]/[action]/[id].html
--------------------------------------------------------
你的这个方法和上一种.aspx我充分测试了一下,有了些初步结论:http://www.cnblogs.com/szw/archive/2007/12/19/1005860.html

谢谢!

  回复  引用  查看    
#52楼  2007-12-20 09:19 | 黑暗执政者 [未注册用户]
我也在用,刚开始觉得爽,现在,感觉就像泄气的气球一样。
期待正式版解决一些问题:
1,实现controller命名空间问题,在定义route的时候,加入命名空间
这样,就不用去重命名各个controller.比如;后台管理,有个product,会员也有个product,前台显示有个product.而目前,我估计只能如下类似的命名:AdminProductController,UserProductController,ProductController
2,资源路径问题:
目前,我只能把资源,如图片脚步,统一放在另一个根目录下的子目录下。不能放在views下。。
3,controller不能在外部dll中定义。
4,controller中的action过多
5,route问题
要是能实现:Url="User/[controller]/[action],可以不用配置后面的参数,让controller里可以自己解析。目前,我必须一个一个添加route影射。参数不一样的都要。那么,route定义也繁多。
6,在iis6下必须加.mvc才能用?真的么?我在iis5.1下都好好的啊。如果那样,那太遗憾了。。。。
7,个人觉得,controller只用来重定向就好了。我只要那干净的url,没有post,没有viewstate的界面.至于开发方式,可以自己选择,我还是喜欢petshop模式,所以,views跟bll交互。实在不想把controller写得像脓包一样。。
8,俺语言表达能力差,也许说得不清楚,QQ:759922422.兄弟们,加油QQ啊,或者有技术群的,就收留我吧。一起讨论讨论。
  回复  引用    
#53楼  2007-12-20 09:19 | Yok      
--引用--------------------------------------------------
韩现龙: 楼主所言极是,不知是小弟才疏学浅还是MS MVC的问题,我在.cs页面无法引用.aspx页面上的runat=&quot;server&quot;的控件。。这真让我郁闷又气愤!!
--------------------------------------------------------
C本来就不需要理会V里面有什么的,这是mvc的优势。只是你webform用多了造成了惯性思维


  回复  引用  查看    
#54楼  2007-12-20 09:24 | Yok      
@楼主:
MVC的只UI Helper是方便你生成html元素,如果你们有做html的美工并且觉得难以配合,那就直接告诉他们地址,让他们写<a>好了
  回复  引用  查看    
#55楼 [楼主] 2007-12-20 14:23 | SZW      
@Yok
我说的“程序员”和“美工”是指两种分工,小项目一个人完成也可以(当然太小的项目还是WebForm更方便,毕竟MVC多半是面向企业级的)。所以我所说的“协调”不只是说多人之间的信息传递,哪怕一个人,在程序代码比较庞杂的情况下(直接在页面编辑的大项目我只能想到“庞杂”这词),很容易在程序接口改变的时候,遗漏了在页面上对应的修改(毕竟编译时候是不会检查字符串的,所以不会报错。这点对于较大的系统,是很难保证的)。我做.net之前弄了将近7年asp,所以我对这个问题十分敏感。如果都用字符串表示,恐怕以后MVC的程序“字典”也要像ASP那样厚了。
如果你说的是我所说的.mvc的问题,很多连接都在数据库或者别的网站上被引用,所以才存在可访问性兼容性的问题,况且MVC中大部分需要Controller的URL是自动生成的,格式由global负责,不是美工的范畴。不然就只是单纯升级上的问题了,这倒不麻烦。

至于为什么说直接用字符串表示不好(或者说不如codebehinde),这个问题其实asp.net刚出现的时候,已经作为“亮点”回答了。一部分是我上面说的“协调统一”上的原因,还有就是现在的流行趋势“面向对象”,对于代码开发人员通俗的说,至少理想的状态是绝大多数引用都能被.出来(说明已经实体化或者有智能提示可以自动监测到对象的存在。即使“面向对象”中所说的对象不是一定要能被程序感知。所以我只能说是“理想的状态”)。

不过庆幸的是,MVCToolkit里面还提供了范类的方法,只不过还有很多bug有待修补。

谢谢!
  回复  引用  查看    
#56楼 [楼主] 2007-12-20 14:58 | SZW      
@黑暗执政者
--引用--------------------------------------------------
黑暗执政者: 我也在用,刚开始觉得爽,现在,感觉就像泄气的气球一样。
期待正式版解决一些问题:
1,实现controller命名空间问题,在定义route的时候,加入命名空间
这样,就不用去重命名各个controller.比如;后台管理,有个product,会员也有个product,前台显示有个product.而目前,我估计只能如下类似的命名:AdminProductController,UserProductController,ProductController
2,资源路径问题:
目前,我只能把资源,如图片脚步,统一放在另一个根目录下的子目录下。不能放在views下。。
3,controller不能在外部dll中定义。
4,controller中的action过多
5,route问题
要是能实现:Url=&quot;User/[controller]/[action],可以不用配置后面的参数,让controller里可以自己解析。目前,我必须一个一个添加route影射。参数不一样的都要。那么,route定义也繁多。
6,在iis6下必须加.mvc才能用?真的么?我在iis5.1下都好好的啊。如果那样,那太遗憾了。。。。
7,个人觉得,controller只用来重定向就好了。我只要那干净的url,没有post,没有viewstate的界面.至于开发方式,可以自己选择,我还是喜欢petshop模式,所以,views跟bll交互。实在不想把controller写得像脓包一样。。
8,俺语言表达能力差,也许说得不清楚,QQ:759922422.兄弟们,加油QQ啊,或者有技术群的,就收留我吧。一起讨论讨论。
--------------------------------------------------------

1、我目前的解决方法和你一样,这种同时牵连到工能板块和权限划分的,优先按权限划分,把功能打乱。但是真正的数据库操作等具体过程的实现都是在Controller中引用同一个DataContext的过程,所以我还是能够接受这种划分方式的,毕竟也有它方便统筹的优点。
2、这个我目前感觉对于.js/.jpg之类的引用确实大大的不方便,但只是心理不爽,不存在太大问题,谁让View担负的本来就不是资源管理的功能呢。
3、我没有尝试过,但是据TT.NET反映,比如引入第三方论坛的dll(也重写URL),偶尔会出错,后来又正常了。
4、确实比较多,但是多倒不是最大的问题,问题是怎么把它们高效地组织管理起来。
5、像你这样的用途,route定义是必须的,不要依赖他给的原始方式,那只适合比较普遍的情况。
6、你用iis5.1是在IIS设置好了直接用IP打开还是在VS2008中直接编译的?直接debug的时候,是不会出错。如果那样你还能不借助第三方的工具完成,那更值得我们深入研究一下了。
7、controller的功能之一就是重定向,但是定向的同时传输ViewData也是必须的阿,如果你还在.aspx中直接获取数据源的话,那就没必要用MVC了。但是你说的没有post(你是说postback吧?form的post还是要的^_^),没有viewstate,本来就是MVC追求的。
8、非常感谢你的留言!
  回复  引用  查看    
#57楼  2008-01-11 20:23 | tianyamoon      
装个正式版吧。
  回复  引用  查看    
#58楼 [楼主] 2008-01-12 11:38 | SZW      
@tianyamoon
你说的是VS2008还是ASP.NET MVC的正式版?已经出来了?
  回复  引用  查看    

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-12-21 13:54 编辑过


相关链接: