2009-09-13 68 views
0

我使用ASP.NEt MVC爲我的項目之一。 在這我有僱員控制器,可以調用www.Mysite.com/Employee/ url。Asp.Net MVC路由差異在www.Mysite.com/Employee和www.Mysite.com/Employee/使用JqGrid

另外我已經使用的jqGrid它使用followng來獲取數據

URL: 「GetGridData」

在測試相同我發現

  1. 如果i型WWW .Mysite.com/Employee /在瀏覽器中撥打

    www.Mysite.com/Employee/GetGridData

  2. 如果我在瀏覽器中鍵入www.Mysite.com/Employee呼叫到

    www.Mysite.com/GetGridData

注意:缺少/在第二次通話結束。

如何糾正這個問題,因爲最終用戶可能會在瀏覽器中輸入任何此URL。

+0

我可以看到您的路線圖嗎?它應該在Global.asax.cs的Application_Start方法中設置。 – 2009-09-13 08:32:59

+0

這是相同的,默認情況下我沒有修改。 routes.MapRoute(「Default」,「{controller}/{action}/{id}」,New with {.controller =「Home」,.action =「Index」,.id =「」}) – 2009-09-13 08:39:53

回答

2

我想看看你是如何要求的jqGrid使它的Web服務調用 - 因爲它不會知道在默認情況下對MVC的路由引擎什麼 - 和這一切都發生在客戶端。

步進MVC外一分鐘,如果我有一個頁面:

example.com/page1.aspx

而且具有相對鏈接到其他網頁上有:

<a href="page2.aspx">Click here</a> 

瀏覽器將尋找page2.aspx在同一水平Page1.aspx的,即

example.com/page2.aspx

如果我將第1頁到一個新的文件夾:

example.com/NewFolder/page1.aspx

瀏覽器會請求

example.com/NewFolder/page2。aspx

當用戶點擊鏈接。

您的GetGridData調用發生了同樣的事情 - 這些都是由Web瀏覽器根據其可用信息向您的服務器進行的。

所以,如果你的頁面上回應:

example.com/Employee

,並要求相對請求:

GetGridData

的瀏覽器將發送該請求到相同的級別員工似乎是:

example.com/GetGriddata

因爲路由引擎無法找到該請求的路徑,然後失敗。

你應該看看動態通過路由系統生成的GetGridData呼叫的URL,這將確保它的建成爲:

url: "/Employee/GetGridData" 

最終剪輯添加

忘記要提一下,你應該使用UrlHelper Action methods這個:

url: <%=Url.Action("GetGridData")%> 

這將生成當前控制器上GetGridData方法的路徑。如果你需要訪問一個不同的控制器,或者傳遞一些值,那麼有重載可以幫助你。

+0

感謝您的回覆,但這不會達到目的,就好像我嘗試使用Employee/GetgridData,現在它會在調用時生成 www.Mysite.com/Employee/GetGridData,而在調用時沒有/和www.Mysite.com/Employee/Employee/GetGridData用/ – 2009-09-14 12:34:04

+0

對不起,應該看過:「/ Employee/GetGridData」 – 2009-09-14 16:47:13