【问题标题】:defining MVC routes and controller定义 MVC 路由和控制器
【发布时间】:2017-06-02 18:55:42
【问题描述】:

我已经定义了这个 mvc 路由。

 routes.MapRoute(
            name: "Author",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Author", action = "Index", id = UrlParameter.Optional }
        );

所以我的网址会是这样的:

http://mysitename.com/Author/AuthorName - 这应该带来特定作者的所有引用。 http://mysitename.com/Author/Authorname/QuoteID - 这应该带来该作者的特定引用。

我的控制器名称是作者控制器。这可行吗?如果是这样,我应该如何定义路由和操作方法来完成这个?

【问题讨论】:

  • 什么意思没有定义动作?并且该路由定义不会产生其中任何一个 url。
  • 那应该如何定义路由呢?
  • 您是否有 2 个操作方法,一个接受作者姓名(用于与该作者关联的所有引用)和一个单独的方法来返回特定 QuoteID 的视图?
  • 不,除了默认的 Index(),我什么都没有。
  • 我假设您不希望路线中出现Index 一词(您当前的路线就是这种情况(以及刚刚添加的答案)。

标签: asp.net-mvc


【解决方案1】:

您通常有 2 种不同的方法,一种用于报价列表,另一种用于特定报价的详细信息。假设他们是

public ActionResult Quotes(string author)

public ActionResult QuoteDetails(string author, int id)

您的路线定义将是

routes.MapRoute(
    name: "AuthorQuotes",
    url: "Author/{author}",
    defaults: new { controller = "Author", action = "Quotes" }
);

routes.MapRoute(
    name: "QuoteDetails",
    url: "Author/{author}/{id}",
    defaults: new { controller = "Author", action = "QuoteDetails" }
);

这两个都需要在默认路由之前。

附带说明,第二条路线不需要作者姓名,您可以只使用id 参数,并考虑为作者姓名使用“slug”路线(请参阅this answer 示例

【讨论】:

    猜你喜欢
    • 2015-10-12
    • 2018-02-20
    • 2014-03-07
    • 1970-01-01
    • 2016-04-05
    • 1970-01-01
    • 2013-09-30
    • 2018-09-14
    • 1970-01-01
    相关资源
    最近更新 更多