【问题标题】:C# asp.net mvc 1.0 routingC# asp.net mvc 1.0 路由
【发布时间】:2010-10-19 14:19:21
【问题描述】:

在我的网络应用程序中。我想设置这样的路线:

/document/quality/index
/document/general/index

/document/quality/detail/[id]
/document/general/detail/[id]

如您所见,我有两种文档:一般文档和质量文档。在我的 global.asax 文件中进行设置的最佳方法是什么?我尝试了以下方法,但我没有得到它的工作:

routes.MapRoute(
    "QualityDocument",
    "Document/Quality/{action}/{id}",
    new { controller = "Document", action="Index", id= ""}
    );

routes.MapRoute(
    "GeneralDocument",
    "Document/General/{action}/{id}",
    new { controller = "Document", action = "Index", id = "" }
    );

routes.MapRoute(
    "Default",                                              // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

编辑

我现在可以使用它,但是当我更改我的 asax 文件中的 action="" 时,它不再起作用了:

全球.asax:

routes.MapRoute(
    "GeneralDocument",
    "Document/General/{action}/{id}",
    new { controller = "Document", action = "blaat", id = "" }
    );

文档控制器:

public void blaat(int? id)
{
    Response.Write("algemeen");
    // return View();
}

现在我收到资源未找到错误。但是当我使用 index 而不是 blaat 时,它正在工作。怎么会?

【问题讨论】:

    标签: c# model-view-controller routing


    【解决方案1】:

    您应该能够在路由前加上“文档”,然后设置默认值,例如:

     routes.MapRoute("DocumentView", 
                    "Document/{controller}/{action}/{id}", 
                    new { controller = "General", action="Index", id = ""  }
                );
    

    记住你想要完全定义的路由!在制定路线时。不要让那些意想不到的路线通过:D

    查看 Scott Hanselman 在 MIX 上的演讲 很有趣,你会得到一些很棒的提示!

    http://www.hanselman.com/blog/Mix09FirstHalfRollupAndSessionVideos.aspx

    【讨论】:

      【解决方案2】:

      也许添加控制器属性,但将其限制为文档控制器。

      routes.MapRoute(
          "QualityDocument",
          "{controller}/Quality/{action}/{id}",
           new { controller = "Document", action="Index", id= ""},
           new { controller = "Document" }
      );
      routes.MapRoute(
          "GeneralDocument",
          "{controller}/General/{action}/{id}",
          new { controller = "Document", action = "Index", id = "" },
          new { controller = "Document" }   );
      

      【讨论】:

      • 添加控制器属性是什么意思?这是如何工作的?
      • 我的意思是把 {controller} 放到你的模式中。我想知道它是否无法提取控制器值,因为它没有出现在您的模式中。
      • 稍微想了想,是不是需要拉出文档类型属性就知道如何区分这两者了?这可能需要自定义路由处理程序才能正确执行。
      • 如果有两种类型的文档和 /Document/MMM/Index 都路由到 Document 控制器上的 Index 操作,如果没有“类型”路由值,您如何知道要索引的 MMM 类型?
      • “类型”路由是什么意思?
      【解决方案3】:

      试试这个:

      routes.MapRoute(
          "QualityDocument",
          "Document/Quality/index",
          new { controller = "Document", action="Index" }
      );
      
      routes.MapRoute(
          "Default",                                              // Route name
          "Document/Quality/details/{id}",                               // URL with parameters
          new { controller = "Document", action = "Details", id = "" }  // Parameter defaults
      );
      

      【讨论】:

        猜你喜欢
        • 2011-10-19
        • 1970-01-01
        • 1970-01-01
        • 2011-03-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多