2010-08-16 52 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