Mvc:传递id但不在友好网址中显示

时间:2013-03-22 03:22:59

标签: asp.net-mvc asp.net-mvc-3 friendly-url

我有一个呈现新闻列表的视图,因为我有一个href标签,我需要调用一个Detail方法并将其传递给新闻ID,现在我在我的网址中有一个查询字符串,就像那样 新闻/详细信息?id = x ...但是我需要类似新闻/详情/类别/标题的内容,一个包含新闻类别,名称和没有ID的友好网址

这是我的行动,它有效但我得到了查询字符串

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"}
        );

但它永远不会转到详细信息actionresult,而且我还需要传递id参数来显示一些新闻详细信息,但我不想在友好的URL中显示它。我真的很困惑如何实现它。提前致谢

4 个答案:

答案 0 :(得分:0)

使用:

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

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

确保您的路线未被其他路线覆盖。所以先把你的路线放在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 :(得分:0)

第一个网址更正

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

只要您看到与路线相关的问题,您就可以Route Debugger