【问题标题】:URL just isn't displaying what I want [duplicate]URL 只是没有显示我想要的 [重复]
【发布时间】:2011-05-25 00:03:11
【问题描述】:

可能重复:
How can I accomplish this type of URL in ASP.Net MVC2?

我想创建 HTML 链接,例如:

/Auctions/Clothes
/Auctions/Electronics
/Auctions/Real Estate

这是我构建链接的方式:

<li>@Html.ActionLink("Ropa", "Index", "Anuncios", new { category = "Ropa" }, new { })</li>
<li>@Html.ActionLink("Libros", "Index", "Anuncios", new { category = "Libros" }, new { })</li>

问题是链接被这样使用:

http://localhost:8589/Anuncios?category=Libros

我希望我的 URLS 看起来很漂亮,因此我希望上面是这样的:

/Anuncios/Libros

关于如何解决此问题的任何建议?这是 ActionResult 方法,澄清一下,这正是我想要做的。它可以工作,只是 URL 很糟糕。

public ActionResult Index(string category)
{            
    AuctionRepository auctionRepo = new AuctionRepository();
    var auctions = auctionRepo.FindAllAuctions().Where(a => a.Subcategory.Category.Name == category);
    return View(auctions);
}

【问题讨论】:

  • 你的路由是怎么配置的?
  • 完全没有配置(在 Global.asax 文件中)如果你是这个意思。有什么建议吗?
  • 如果你还没有配置任何路由,你希望 MVC 怎么知道你希望你的 url 看起来像什么?
  • this question 不是同一个问题吗?

标签: c# asp.net-mvc url asp.net-mvc-3


【解决方案1】:

请查看此问题以实现您的要求。

编辑:

创建一个新的 HTML 助手,您将使用它来呈现这样的菜单

public static class MyMenuHelper {
    public static string MyMenu(this HtmlHelper helper) {
        List<Category> categories = GetCategories();
        foreach ( Category c in categories ) {
            helper.RouteLink( c.Name, "AuctionCategoryDetails", new { categoryName = c.Name } );
        }
    }
}

最后在你的 _Layout 页面中像这样使用它

@Html.MyMenu

【讨论】:

  • 嗨 Lorenzo,非常感谢您的帮助。您调用“html”的变量不可用。也许是错字?我还看到该方法返回一个字符串,但它从不返回任何内容。有什么想法吗?
  • 是的!这是一个错字。应该是“帮手”。我已经编辑了答案
  • 请注意网址中不能有空格。因此,如果这是您的情况,只需从您放在 RouteLink 的第三个参数上的类别名称中删除空格
  • 嗯...'helper' 变量没有 RouteLink 方法。我试过同时引用 System.Web.WebPages.Html;和 System.Web.Mvc;但方法不存在。
  • namespace System.Web.Mvc.Html
【解决方案2】:

您需要添加一些路由,以便 MVC 知道您希望链接的外观。它不能读懂你的想法,也不能煮咖啡。

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapRoute(
        "Anuncios",                 // Route name
        "Anuncios/{category}",      // URL with parameters
        new { category = "Index" }  // Parameter defaults
    );
}

【讨论】:

  • 这没有回答问题。它只是解释了如何创建路线...
  • 这怎么可能不是一个答案...他的问题是他还没有创建任何路由,所以我向他展示了如何添加路由,以便 ActionLink 方法可以呈现所需的 url。跨度>
  • @Serg:你试过this post中标记的答案吗?为什么它不符合您的要求?
  • @Pauli:我什么都没决定。我刚刚阅读了这个问题。我邀请你再读一遍,慢慢来……
  • @Serg:让我们从一个简单的链接开始:打开您的 _Layout.cshtml,然后在某处写 &lt;%: Html.RouteLink("Clothes", "AuctionCategoryDetails", new { categoryName = "Clothes" }); 这将在每个使用 ?Layout.cshtml 的页面上创建一个链接,例如 &lt;a href="/Auctions/Clothes"&gt;Clothes&lt;/a&gt;。我想您在昨天的帖子中描述了一个控制器操作来处理链接点击。这行得通吗?
猜你喜欢
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多