【问题标题】:Asp.Net MVC routing diffrence in www.Mysite.com/Employee and www.Mysite.com/Employee/ while using JqGrid使用 JqGrid 时 www.Mysite.com/Employee 和 www.Mysite.com/Employee/ 中的 Asp.Net MVC 路由差异
【发布时间】:2009-09-13 08:30:02
【问题描述】:

我正在为我的一个项目使用 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。

【问题讨论】:

  • 我可以看看你的路线图吗?它应该在 Global.asax.cs 的 Application_Start 方法中设置。
  • 默认是一样的,我没有修改。 routes.MapRoute("Default", "{controller}/{action}/{id}",New With {.controller = "Home", .action = "Index", .id = ""} )

标签: asp.net asp.net-mvc routing jqgrid


【解决方案1】:

我会看看您是如何要求 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 methods

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

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

【讨论】:

  • 感谢您的回复,但这不会达到目的,因为如果我尝试使用 Employee/GetgridData 现在它在没有 / 和 www.Mysite.com/ 的情况下调用时会生成 www.Mysite.com/Employee/GetGridData使用 / 调用时的 Employee/Employee/GetGridData
【解决方案2】:

尝试调试您的路线: Phil Haack's: ASP.NET Routing Debugger

【讨论】:

    猜你喜欢
    • 2012-12-23
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多