C# 在mvc中更改生成的详细信息视图

C# 在mvc中更改生成的详细信息视图,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,所以我有一个名为Movies的Views文件夹。里面有索引、创建、删除、详细信息、编辑。(自动生成)。现在,当我点击details按钮时,URL变成xx.com/Movies/details/2。该数字表示数据库中的ID。有没有办法让它显示标题而不是ID?当然有。你只需要更新路线。在Route Config文件中,您会注意到这样一行: routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Hom

所以我有一个名为Movies的Views文件夹。里面有索引、创建、删除、详细信息、编辑。(自动生成)。现在,当我点击details按钮时,URL变成xx.com/Movies/details/2。该数字表示数据库中的ID。有没有办法让它显示标题而不是ID?

当然有。你只需要更新路线。在Route Config文件中,您会注意到这样一行:

 routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });
在这里,您需要将其更改为

  routes.MapRoute("Default", "{controller}/{action}/{title}", new { controller = "Home", action = "Index", title = UrlParameter.Optional });
现在,您应该将动作方法签名从

    public ActionResult Details(int id)
    {

        return View();
    }

顺便说一下,我没有测试它,我只是写了一些概念。您需要进行测试,特别是如果您的标题不是url编码的,或者包含没有破折号的空格

编辑:

在MVC5中,可以使用基于属性的路由

我用它来生成SEO URL,如下所示:

[Route("Products/{slug}-{productId}")] 
public ActionResult Details(int productId, string slug)
{
   return View();
}
当我需要创建url时,我使用了snippet:

Url.Action("Details", "Products", new { productId = 201, slug = "My-Keyword-Title" })

看来我需要更好地理解路线了。当你修改路由时,谷歌索引是如何工作的?我已经尝试过了,但是我得到了这个错误
HTTP错误400.0-错误请求
。此外,URL仍然显示ID
http://localhost:5107/Tv/Details?id=4
啊,这样好多了。我怎样才能把数据库中的信息放到slug中呢?我已经更新了答案。请检查我如何创建Url.Action的示例。您需要从数据库中获取slug并构建url。怎样?就像从数据库中获取任何数据一样。如果您将该ID用于路由,您可能会以某种方式从数据库或查询字符串中获得该ID,对吗?您可以使用id查询数据库以获取slug,然后构建url。如果您仍然不清楚,请随时提问。我试图查找的项目必须是主键吗?URL路由与您的数据库/主键等无关。路由用于URL结构。您的id可以是主键或任何东西。您将如何访问数据库以获取slug—完全取决于您如何设计数据库,这完全超出了与URL路由相关的原始问题的上下文。如果您有任何与数据库相关的问题,您可以在StackOverflow中发布新问题,我们可以在那里讨论您的数据库问题。顺便说一下,如果我能回答你关于路由的问题,请接受我的回答。非常感谢。
Url.Action("Details", "Products", new { productId = 201, slug = "My-Keyword-Title" })