zoukankan      html  css  js  c++  java
  • 使用微软ASP.NET MVC Framework的一些感受 + 收集园子朋友发现的bug反馈 【补充】


        原文章见:http://www.cnblogs.com/szw/archive/2007/12/18/1004344.html

        这里总结一下许多园友提出的一些其他的bug和相关的一些意见、建议,以及对其中一些方案我的测试结果。

    1. --引用--------------------------------------------------
      韩现龙: 楼主所言极是,不知是小弟才疏学浅还是MS MVC的问题,我在.cs页面无法引用.aspx页面上的runat="server"的控件。。这真让我郁闷又气愤!!
      还有,Scott写的关于MVC的一篇文章上的关于对Detail这个方法的单元测试,我在本地却没有TestViewEngine这个对象。。。
      --------------------------------------------------------

      对应bug:原本的CodeFile被CodeBehide替代(且不管是不是有意,但目前好像没有官方说明故意这么做的好处是什么)。我我们都知道vs2005开始,webApplication 和 webSite 文件上的最大区别就是webApplication 的.aspx文件会多一个.designer.cs/.vb 文件(vs2003里面是另外一个文件,没记错的话好像是.resx吧),MVC里面少了这个文件,就不能在.aspx.cs调用.aspx控件,而在.aspx里面直接调用是可以的。

      解决方案及说明http://www.cnblogs.com/QLeelulu/archive/2007/12/12/992660.html
       

       
    2. 关于"[controller].mvc/[action]/[id]”在IIS6下面的格式问题(.mvc)
                  // Note: Change Url= to Url="[controller].mvc/[action]/[id]" to enable 
                  
      //       automatic support on IIS6 

      对应问题:
      --引用--------------------------------------------------
      五、觉得最头疼的一个问题,应为在MVC技术层面上似乎还不那么好解决:打开MVC的Global.asax,我们可以看大哦这样一句话:
                  // Note: Change Url= to Url="[controller].mvc/[action]/[id]" to enable 
                  
      //       automatic support on IIS6 
      --------------------------------------------------------
      更多说明见我原文章第五点。

      解决方案及说明
      方案一:
      --引用--------------------------------------------------
      膘悍: 对于最后一个问题,我的解决方法是,把"[controller].mvc/[action]/[id]"表达式书写成"[controller]/[id]/[action].aspx"
      我测试过,这样写没有问题,当然写成"[controller]/[action]/[id].aspx"也可以,只要最后是交给ASP.NET的ISAPI处理就行。
      --------------------------------------------------------

      测试结果:这种方法确实可行,但是这样一用,又暴露出了一个本来不是bug的bug(可以说是这种方案的一个bug或者使用注意点):
      当我这样使用的时候,链接过去没有问题,格式是"[controller]/[action]/[id].aspx":
      <%# Html.ActionLink("编辑",new{Action="PlateEdit" , ID=Eval("PlateID")}) %>

      但是,如果我使用Html.ActionLink<T>范型方式之后,格式成了:"[controller]/[action]/.aspx/[id]",提示404错误(即找不到网页)。即使你改成了"[controller]/[action]/[id].aspx"格式在浏览器直接打开,还是会自动跳转到"[controller]/[action]/.aspx/[id]"格式,并报错。
      个人猜想是RouteTable.Routes在执行或者重构的时候,总是会把最后一个参数(如上面的[id])加到末尾,而此时已经构成了"[controller]/[action]/.aspx"的格式,即使[controller]过程内部本身没有出错,但是RenderView出来的地址格式已经发生了变化(按最后合并成的格式),导致这样的情况(可能但不只可能是这种情况)。所以.mvc加在[controller]后面不会有问题,因为[id]本身就接在[action]后面。

      看来如果用这种方法的时候,Html.action()和html.action<T>()在目前来说还不能完全通用。

      方案二:
      --引用--------------------------------------------------
      膘汉: @SZW
      呵呵,我也是看到有人说要在IIS6上添加mvc扩展名交给asp.net的isapi处理才想到的。
      再修改一下,把html扩展名交给asp.net的isapi处理就可以写成下面这样了。
      [controller]/[action]/[id].html
      --------------------------------------------------------
      测试结果:作为方案一的另一种选择(也是最理想的),这种方法在我这里,至少光修改一下.html,目前没有成功。

    3. 关于MVCToolkit的Html.ActionLink()我刚才又发现了一个有点不太合理的地方(别的控件可能也存在类似情况):当我输入htmlAttributes字段的时候,同样都输入下面的参数:
      new { onclick= "alert('Hello TNT2!');"}

      如果我使用Html.ActionLink<T>()的方法,是不会出错的,而当我使用Html.ActionLink()方法的时候,就提示这样的错误:
       CS1502: The best overloaded method match for 'System.Web.Mvc.HtmlHelper.ActionLink(string, string, string)' has some invalid arguments

      那么怎么样才能在Html.ActionLink()中使用onclick呢?发现很有意思的一件事,起初我发现只要把onclick改成OnClick就行了!但是正在打字这会我为了慎重起见又测试了一下,居然还是抱错!

      貌似这个HTML.action<T>()和HTML.action()还真的有点不投缘啊……

      PS:部分类似问题解决放案见: MVC Toolkit 部分已发现bug的根治方案 Part(1)
    4. 此外对于HTML.action的参数格式安排和对应注释(根源是前一个的问题),用的时候感觉非常乱,不知道用过的朋友感觉到了没有。比如第二个参数,明明提示是value(假设是value参数)的,你输完往后面输的时候,第二个已经不是value了,而是别的什么,你必去回过头去修改。除非你对他的格式了如指掌,并且想好了你要输那些,忽视掉他的注释一口气输完,那这样这注释似乎有点浪费感情了……况且大多数时候谁愿意去记那些东西,像Html.Select那么多情况下的那么多参数顺序……

        今天暂时先总结这么点,欢迎补充!

    转载请注明出处和作者,谢谢!
    作者:JeffreySu / QQ:498977166
    博客:http://szw.cnblogs.com/

    Senparc官方教程《微信开发深度解析:微信公众号、小程序高效开发秘籍》,耗时2年精心打造的微信开发权威教程,点击这里,购买正版
    
微信开发深度解析:微信公众号、小程序高效开发秘籍

    Senparc 官方微信开发视频教程:《微信公众号+小程序快速开发》,点击这里点击观看
    Senparc 官方微信开发视频教程:《微信公众号+小程序快速开发》
  • 相关阅读:
    Java高级之类结构的认识
    14.8.9 Clustered and Secondary Indexes
    14.8.4 Moving or Copying InnoDB Tables to Another Machine 移动或者拷贝 InnoDB 表到另外机器
    14.8.3 Physical Row Structure of InnoDB Tables InnoDB 表的物理行结构
    14.8.2 Role of the .frm File for InnoDB Tables InnoDB 表得到 .frm文件的作用
    14.8.1 Creating InnoDB Tables 创建InnoDB 表
    14.7.4 InnoDB File-Per-Table Tablespaces
    14.7.2 Changing the Number or Size of InnoDB Redo Log Files 改变InnoDB Redo Log Files的数量和大小
    14.7.1 Resizing the InnoDB System Tablespace InnoDB 系统表空间大小
    14.6.11 Configuring Optimizer Statistics for InnoDB 配置优化统计信息用于InnoDB
  • 原文地址:https://www.cnblogs.com/szw/p/1005860.html
Copyright © 2011-2022 走看看