0

プロジェクトの 1 つに ASP.NET MVC を使用しています。これには、 www.Mysite.com/Employee/ urlから呼び出すことができる Employee コントローラーがあります。

また、データを取得するために以下を使用するJqGridを使用しました

url: "GetGridData"

同じことをテストしているときに、私はそれを見つけました

  1. ブラウザに www.Mysite.com/Employee/ と入力すると、呼び出しが行われます

    www.Mysite.com/Employee/GetGridData

  2. ブラウザに www.Mysite.com/Employee と入力すると、呼び出しが行われます

    www.Mysite.com/GetGridData

注: 2 番目の呼び出しの最後に / がありません。

エンド ユーザーがブラウザでこの URL のいずれかを入力できる可能性があるため、これを修正する方法。

4

2 に答える 2

2

JqG​​ridにWebサービス呼び出しを行うように要求している方法を見てみましょう。デフォルトではMVCのルーティングエンジンについて何も知らないためです。これはすべてクライアント側で発生します。

ページがある場合は、MVCの外に1分間ステップします。

example.com/page1.aspx

そして、そこに別のページへの相対リンクがあります。

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

ブラウザは、page1.aspxと同じレベルでpage2.aspxを探します。

example.com/page2.aspx

page1を新しいフォルダに移動した場合:

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アクションメソッドを使うべきです:

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

This will generate a path to the GetGridData method on the current controller. If you need to access a different controller, or pass some values, there are overloads to help.

于 2009-09-14T08:45:56.153 に答える
0

ルートをデバッグしてみてください: Phil Haack's: ASP.NET Routing Debugger

于 2009-09-13T12:25:56.413 に答える