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