Asp.net mvc 4 MVC路由新闻页面

Asp.net mvc 4 MVC路由新闻页面,asp.net-mvc-4,asp.net-mvc-routing,Asp.net Mvc 4,Asp.net Mvc Routing,我已经设法让我的MVC项目以SEO友好的方式呈现新闻项目列表: /新闻/-显示列表 /新闻/新闻项目/id/新闻项目标题-单个新闻项目 我真正想要的是: 新闻/id/新闻项目标题 Stackoverflow是如何提出问题的 但是,我似乎无法理解如何通过路由来区分具有相同控制器操作名称(索引)的两个操作 如有任何建议,将不胜感激 编辑: 这是我的路线配置: routes.MapRoute( "News", "News/NewsItem/{newsId}/{newsTitle}",

我已经设法让我的MVC项目以SEO友好的方式呈现新闻项目列表:

/新闻/-显示列表

/新闻/新闻项目/id/新闻项目标题-单个新闻项目

我真正想要的是:

新闻/id/新闻项目标题

Stackoverflow是如何提出问题的

但是,我似乎无法理解如何通过路由来区分具有相同控制器操作名称(索引)的两个操作

如有任何建议,将不胜感激

编辑:

这是我的路线配置:

routes.MapRoute(
    "News",
    "News/NewsItem/{newsId}/{newsTitle}",
    new { controller = "News", action = "NewsItem", newsTitle = UrlParameter.Optional },
    new { newsId = @"\d+" }
);

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "SkipHire", action = "Index", id = UrlParameter.Optional }
);
编辑2:

这就是我对所有内容的修改:

路线

控制器

public class NewsController : Controller
{
     public ActionResult Index()
     {
         var q = _ctx.tblNews.OrderBy(x => x.newsCreateDate)
                  .Where(x => x.WebsiteID == 2).ToList();
         return View(q);
     }

     public ActionResult NewsItem(int newsId, string newsTitle)
     {
          return View();
     }
}
视图-索引(段)


@foreach(模型中的var x)
{
@ActionLink(x.newsttitle,“NewsItem”,new{newsId=x.newsId,newsttitle=x.newsttitle.ToSeoUrl()})
}
Actionlink生成:新闻/新闻项?新闻ID=3&newsTitle=my新闻项


我想要:News/3/my News item

一种方法是在路由配置中引入额外的路由

RouteConfig.cs:

            routes.MapRoute(
            name: "News_seo_friendly",
            url: "{controller}/{id}/{seo}",
            defaults: new { action = "NewsItem", seo = UrlParameter.Optional }
        );
*请注意此路由中的操作值。您需要在该控制器上使用相应的操作方法。 此外,由于该路线更具体,因此它超越了现有的、更通用的路线

可能更安全的Alt RouteConfig.cs:

            routes.MapRoute(
            name: "News_seo_friendly",
            url: "News/{id}/{seo}",
            defaults: new { controller = "News", action = "NewsItem", seo = UrlParameter.Optional }
        );
新闻控制器:

    public ActionResult NewsItem(string id)
    {
        return View();
    }
另一种方法是让“新闻”成为项目中自己的领域。这使您有机会隔离您的路由(如果您的应用程序较大),并为控制器名称提供灵活性

在反馈后编辑 希望提请注意控制器的newItem()方法上的参数名称应该与路由设置中声明的内容匹配。在上面的场景中,url:“{controller}/{id}/{seo}”

应该与NewsItem中的参数名称相匹配(字符串id)…或者反之亦然。

您可以显示当前的路由配置吗?抱歉,我似乎无法使其正常工作。链接数据会转到一个查询字符串:News/NewsItem?newsId=3&newsttitle=my News items无需担心。你能展示一下你的html链接是什么样子的吗?我已经找到了为什么它没有呈现一个SEO友好的URL的原因。路由中的{id}应命名为{newsID}。经验教训-一切都是镜子!嘿,sry回来晚了。很高兴你让它工作了。我应该在回答中指出,控制器的方法参数名称必须与该值的路由占位符名称匹配(已更新)。
            routes.MapRoute(
            name: "News_seo_friendly",
            url: "News/{id}/{seo}",
            defaults: new { controller = "News", action = "NewsItem", seo = UrlParameter.Optional }
        );
    public ActionResult NewsItem(string id)
    {
        return View();
    }