2010-08-16 54 views
0

我在使用asp.net mvc2的路由基础结构时遇到了很多麻烦。我在我的global.asax文件中注册了以下路线可以.net mvc路由导致JavaScript错误?

routes.MapRoute(
       "strict", 
       "{controller}.mvc/{docid}/{action}/{id}", 
       new { action = "Index", id = "", docid = "" }, 
       new { docid = @"\d+"} 

      ); 
routes.MapRoute(
       "default", 
       "{controller}.mvc/{action}/{id}", 
       new { action = "Index", id = "" }, 
       new { docConstraint = new DocumentConstraint() } 
      ); 

问题出在第一条路线(“严格”)。三种类型的网址可以匹配第一条路线。 mycontroller/23/myaction,mycontroller/23/myaction/12或mycontroller/23/mvaction/stringid。如果我尝试使用这条路线不指定ID一切的价值,例如正常工作:

Html.ActionLink("Link text", "ActionName", new{docid = 23}); 

一切顺利,但如果我使用链接,如:

Html.ActionLink("Link text", "ActionName", new{docid = 23, id = 223}) 

这将产生网址currentcontroller.mvc/23/ActionName/223这是绝对正确的,但是当它加载页面时,它会在jquery1.4.2.min.js文件中给出一个JavaScript错误。

这很奇怪:如果我将id更改为someid = 223,它将反映在查询字符串中,并且不会出现JS错误。

编辑:我已经做了一些进一步的调试,发现当id和docid在路由值中被提及时,global.asax中忽略了一件事是忽略路径。

routes.RouteExistingFiles = false; 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

routes.ignoreRoute完全绕过,我可以看到的JS文件名中的路由值字典,而在我的控制器调试。

回答

0

如果我们拖到脚本的解决方案资源管理器的Site.Master它会导致下面的输出

<script type="text/javscript" src="../../scripts/jquery.min.js"></script> 

领先的点(..)创建的问题。将源路径放在url.content或使用/ scripts而不是../../scripts将解决问题,因为这些领先的时期迫使它们匹配global.asax中的某些路由。

0

它给出 jquery1.4.2.min.js JavaScript错误文件

造成这种情况的最可能的原因是你显示网页上的东西是不同的,你正在执行的行动,导致错误。你能否从渲染页面提供足够的样本来显示你正在使用jQuery的内容?

+0

问题可能与javascript无关。正如我在我的问题中提到的,因为我使用id参数以及发生错误的docid参数。如果我改变ID为someid(或其他)一切正常。我认为(我可能是错误的)当“{控制器} .mvc/{docid}/{动作}/{id}”匹配出现问题 – 2010-08-16 07:12:34

+0

我已经做了一些调试并更新了问题plz c如果你能帮我在这里问候 – 2010-08-16 07:23:42