Mvc:传递 id 但不在友好的 url 中显示

Posted

技术标签:

【中文标题】Mvc:传递 id 但不在友好的 url 中显示【英文标题】:Mvc: pass id but not show it in friendly url 【发布时间】:2013-03-11 19:49:43 【问题描述】:

我有一个呈现新闻列表的视图,因为我有一个 href 标记,我需要调用一个 Detail 方法并将新闻 id 传递给它,现在我的 url 中有一个这样的查询字符串 News/Details?id=x... 但我需要类似 News/Details/Category/Title-of-something 的东西,一个带有新闻类别、名称且没有 id 的友好 url

这是我的操作,它有效,但我得到了那个查询字符串

foreach (var item in Model)

    <a href='@Url.Action("Details", "News", new  id = item.newsId, category = item.categoryName, name = item.newsName )' title=""> Read More </a>

我正在尝试使用 Url.RouteUrl 之类的东西

 routes.MapRoute(
            name: "Details",
            url: "controller/action/id/category/newsName",
            defaults: new  controller = "News", action = "Details"
        );

但它永远不会进入详细信息操作结果,而且我需要传递 id 参数来显示一些新闻详细信息,但我不想在友好的 url 中显示它。我真的很困惑如何实现它。提前致谢

【问题讨论】:

路由可能被其他路由覆盖。因此,复制此路线并将其移至顶部。我的意思是,将这条路线放在另一条路线的顶部 【参考方案1】:

第一个网址正确

<a href='@Url.Action("Details", "News", new  id = item.newsId, category = item.categoryName, newsName = item.newsName )' title=""> Read More </a>

当您看到与路线相关的问题时,您可以Route Debugger

【讨论】:

【参考方案2】:

确保您的路线没有被其他路线覆盖。因此,将您的路线放在 RoutConfig.cs 中 将您的代码更改为:

foreach (var item in Model)

    <a href='@Url.Action("Details", "News", new  id = item.newsId, category = item.categoryName, newsName = item.newsName )' title=""> Read More </a>
//change name=item.newsName to newsName=item.newsName

还要确保您的控制器根据您的路由详细信息具有正确的签名:

public class NewsController : Controller

    public ActionResult Details(int id, string category, string newsName )

【讨论】:

【参考方案3】:

试试这个:

@html.RouteLink("Read More", "Details", new  action = "Details", id = item.newsId, category = item.categoryName, newsName = item.newsName )

【讨论】:

它工作得很好,所以现在我可以向我的 ActionResult 发送多个参数,并且我拥有和 URL 友好的东西,例如 News/Details/Id/Category/Title-of-something,routes.MapRoute 是对,所以你知道我如何将 id 发送到我的操作结果,并让我的 url 带有类似 News/Details/Category/Title-of-something 的东西而没有 id。谢谢【参考方案4】:

使用:

<a href='@Url.Action("Details", "News", new  id = item.newsId, category = item.categoryName, newsName = item.newsName )' title=""> Read More </a>

【讨论】:

以上是关于Mvc:传递 id 但不在友好的 url 中显示的主要内容,如果未能解决你的问题,请参考以下文章

MVC 4 - Razor - 将变量传递到 href url

如何将 AJAX 请求中的 id 列表传递给 MVC 中的服务器

带有 java 脚本的 MVC 中的用户友好 URL

在 Razor (C#/MVC 4) 中生成“友好 URL”的帮助程序

以向导形式传递数据而不在 MVC 中回发

友好 ID 随机网址