asp.net - 如何防止 ?Area= 添加到生成的 URL 中

标签 asp.net asp.net-mvc asp.net-mvc-3 c#-4.0 t4mvc

有时我的应用程序会生成类似 http://localhost/?Area= 的 URL或http://localhost/SomeController?Area=

我目前没有在此项目中定义任何区域,并且我已尝试从应用程序启动中删除区域注册。

我找到的唯一答案是使用 <a href="Url.Action()">网址。

必须有一种更干净的方法来删除它。手动从 URL 中删除它似乎提供了完全相同的结果,但我不确定为什么会出现这种情况。

如何使用路由系统解决此问题? 请注意,我使用 t4mvc 生成操作链接,而不是默认的 MVC ActionLink 帮助程序

编辑:

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }



    /// <summary>
    /// Registers MVC Routing Collection.
    /// </summary>
    /// <param name="routes">The routes.</param>
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");




        routes.MapRoute(
            "secstdsrte",
            "SecondaryStandards/{standardType}/{sampleid}",
            MVC.Reports.SecondaryStandards(),
            null,
            new { standardType = new SecondaryStandardTypeConstraint()

            }
        );


        routes.MapRoute(
            "misaRoute",
            "Misa",
            MVC.Reports.MISA()
            );

        routes.MapRoute(
            "outfallroute",
            "Outfalls/{fromDate}/{toDate}",
            MVC.Reports.Outfalls( ApplicationController.DefaultFromDate, ApplicationController.DefaultToDate),
            null,
            new 
            { 
                fromDate = new DateTimeConstraint(), 
                toDate = new DateTimeConstraint()
            }
        );

        routes.MapRoute(
            "offspecRoute",
            "Offspec/{fromDate}/{toDate}",
            MVC.Reports.OleOffspec(ApplicationController.DefaultFromDate, ApplicationController.DefaultToDate),
            null,
            new //route constraints 
            {
                fromDate = new DateTimeConstraint(),
                toDate = new DateTimeConstraint()
            }
        );

        routes.MapRoute(
            "searchRoute",
            "Search",
            MVC.Reports.Search()

        );





        routes.MapRoute(
        "compareresultsroute",
        "compare/{samplePoint}/{analysis}/{fromDate}/{toDate}",
        MVC.Reports.CompareResults(null, null, null, ApplicationController.DefaultFromDate, ApplicationController.DefaultToDate),
        null,
        new
        {
            samplePoint = new SamplePointExistsConstraint(),
            analysis = new AnalysisExistsConstraint(),
            fromDate = new DateTimeConstraint(),
            toDate = new DateTimeConstraint() 
        }

        );

        routes.MapRoute(
        "reportsRoute",
        "Reports/{samplePoint}/{fromDate}/{toDate}",
        MVC.Reports.Results("", ApplicationController.DefaultFromDate, ApplicationController.DefaultToDate),
        null,
        new //route constraints 
        {
            samplePoint = new SamplePointExistsConstraint(),
            fromDate = new DateTimeConstraint(),
            toDate = new DateTimeConstraint() }
        );

        routes.MapRoute(
            "railcarsRoute",
            "RailCars/{forDate}",
            MVC.Reports.RailCars(ApplicationController.DefaultToDate),
            null,
            new { forDate = new DateTimeConstraint() }
        );

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new
            { controller = "Reports", action = "Index", id =UrlParameter.Optional } // Parameter defaults
        );
    }
    /// <summary>
    /// Returns boolean value indicating whether the application is currently in debug mode 
    /// </summary>
    public static bool isDebugging
    {
        get
        {
            return HttpContext.Current != null && HttpContext.Current.IsDebuggingEnabled;
        }
    }




    protected void Application_Start()
    {

        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }
}

最佳答案

此问题之前已在 T4MVC @Url.Action(MVC.Controller.Action()) Renders "?Area=" Parameter in QueryString 上讨论过.

简而言之,当站点不使用区域时,这是 T4MVC 中的一个错误。您可以通过删除此行(第 303 行附近)来解决此问题:

result.RouteValueDictionary.Add("Area", area ?? "");

关于asp.net - 如何防止 ?Area= 添加到生成的 URL 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9522895/

相关文章:

c# - 为什么我不能在三元 if 语句中将可为 null 的 int 设置为 null?

c# - 如何使用 Entity Framework 将空值传递给存储过程?

.net - 将现有 ASP.NET MVC 应用程序与 Orchard CMS 集成

c# - 我在 C# Web API 项目中上传哪些文件?

asp.net-mvc - RadioButton用于不在编辑器模板中选择值

jquery - 从 javascript 将大型 Base64 字符串上传/流式传输到 Mvc 的正确方法是什么?

ASP.NET 5 在项目初始化时不断崩溃 VS

c# - Google页面排名检查Asp.Net脚本

c# - Log4Net 与应用程序洞察

c# - 在 .cshtml 页面中发送和接收数据