0

我正在为我的一个项目使用 ASP.NET MVC。在这个我有 Employee 控制器,可以通过www.Mysite.com/Employee/ url 调用。

我还使用了 JqGrid,它使用 followng 来获取数据

网址:“GetGridData”

在测试时我发现

  1. 如果我在浏览器中键入 www.Mysite.com/Employee/ ,则会调用

    www.Mysite.com/Employee/GetGridData

  2. 如果我在浏览器中键入 www.Mysite.com/Employee ,则会调用

    www.Mysite.com/GetGridData

注意:第二次通话末尾缺少 / 。

如何纠正这一点,因为最终用户可能会在浏览器中键入任何此 url。

4

2 回答 2

2

我会看看你是如何要求 JqGrid 进行 Web 服务调用的——因为默认情况下它对 MVC 的路由引擎一无所知——而这一切都发生在客户端。

如果我有一个页面,请离开 MVC 一分钟:

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

并要求相关请求:

获取网格数据

浏览器会将该请求发送到 Employee 所在的同一级别:

example.com/GetGriddata

然后失败,因为路由引擎找不到该请求的路由。

您应该查看通过路由系统动态生成 GetGridData 调用的 URL,这将确保它构建为:

url: "/Employee/GetGridData"

最终编辑添加

忘了提一下,您可能应该为此使用UrlHelper Action 方法

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

这将在当前控制器上生成 GetGridData 方法的路径。如果您需要访问不同的控制器或传递一些值,则可以使用重载来提供帮助。

于 2009-09-14T08:45:56.153 回答
0

尝试调试你的路由: Phil Haack's: ASP.NET Routing Debugger

于 2009-09-13T12:25:56.413 回答