当前位置:  开发笔记 > 编程语言 > 正文

ASP.Net MVC路由问题

如何解决《ASP.NetMVC路由问题》经验,为你挑选了1个好方法。

我有一个MVC路由问题(或者至少我认为它是w/routing :))...

刚刚升级到MVC RC1,但我不确定它是否相关,因为这是我第一次尝试设置MapRoute和相应的RouteLink.

这是路线:

routes.MapRoute("Test1",
                "Forecast/CurrentLineItems/{propertyID}/{forecastYear}/{forecastMonth}",
                 new { controller = "Forecast", action =   "CurrentLineItems", propertyID = "", forecastYear = "", forecastMonth = "" }
);

这是RouteLink ...在视图中它包含在表格单元格中:

Html.RouteLink(Html.Encode(myProperty.Description),"Test1", new { controller = "Forecast", action = "CurrentLineItems", propertyID = myProperty.PropertyID.ToString(), forecastYear = "2008", forecastMonth = "10" })

这是控制器的一个片段:

namespace AnApplication.Controllers  
{
[HandleError]
[Authorize]
public class ForecastController : Controller
{        
    [AcceptVerbs(HttpVerbs.Get)]        
    public ActionResult CurrentLineItems(string propertyID, string forecastYear, string forecastMonth)
    {
       //Some code
    }

现在对于奇怪的行为,当我单击RouteLink指定的链接时,应用程序进入CurrentLineItems方法并且所有方法参数都正确...然后它再次进入CurrentLineItems方法!
例如,这些参数:

propertyID = "scripts"    
forecastYear = "jquery-1.2.6.js"  
forecastMonth = ""    

然后它重复这几次,因为它似乎运行此视图和Site.Master上的所有脚本,然后最后一个是此页面的.css文件!
到底是怎么回事!
调用堆栈没有帮助,因为它列出了上面提到的CurrentLineItems方法,然后下面是可怕的[外部代码]

当我在FireFox/FireBug中分析页面/视图时,我看到的是jQuery调用

这是来自Site.Master的html脚本


    
    <%= Html.Encode(ViewData["Title"]) %>
      
      
        
    
          
    
  

这是脚本视图中的一个片段

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master"AutoEventWireup="true" CodeBehind="CurrentLineItems.aspx.cs" Inherits="AnApplication.Views.Forecast.CurrentLineItems" %>





  

请注意,此ActionLink工作正常(它基本上只是用于测试的菜单项,并且在控制器内部的代码中设置了三个参数...):

<%= Html.ActionLink("Line Items", "CurrentLineItems", "Forecast")%>

非常感谢任何帮助解决这个问题.

谢谢,
格雷格



1> Eilon..:

实际上,在最近发布的ASP.NET MVC Release Candidate中有两个微妙但烦人的错误.这是两个错误:

    我们更改了所有的URL呈现方法,以呈现相对URL而不是绝对URL.虽然我们觉得这可能是一般的正确决定,但我们发现它打破了很多场景.AJAX场景尤其受到影响,因为异步检索数据的URL通常与浏览器地址栏中显示的原始URL不同.

    特别是Html.RouteLink(而不是 Html.ActionLink)中有一个错误(所以它实际上不是红鲱鱼 - 至少不一定).Html.RouteLink会错误地接受"当前"控制器和操作,并将这些值传递给路由系统.只有Html.ActionLink应该这样做.Html.RouteLink根本不应该进行任何处理.它应该只是取你给它的值并将它传递给ASP.NET路由系统.

由于这两个错误都非常糟糕,我们决定回滚导致#1的更改并解决导致#2的问题并发布更新的ASP.NET MVC Release Candidate Refresh.

您将在ScottGu的博客,Phil Haack的博客以及详细介绍刷新的ASP.NET MVC论坛上看到一些帖子.

谢谢,艾伦

推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有