【问题标题】:Url routing suggestion in asp.net mvcasp.net mvc 中的 URL 路由建议
【发布时间】:2010-05-06 04:09:28
【问题描述】:

我的一个视图页面中有一个操作链接

<%=Html.ActionLink("Details", "Details", new { id = Model.Id })%> 并将我重定向到具有类似 http://localhost:1985/Materials/Details/2 的 url 的页面,而不是这个我想将我的 url 作为 http://localhost:1985/Materials/Details/steel 材料名称而不是 Id... 这可能吗..... . 这是我的控制器动作方法,

    public ActionResult Details(int id)
    {
        var material = consRepository.GetMaterial(id);
        return View("Details", material);
    }

编辑: 我正在迭代从 jsonresult 控制器返回的 json 对象....

$.each(data.Results, function() {
            divs += '<a href="/Materials/Details/' + this.Id + '">Details</a>
            &nbsp;<a href="/Materials/Edit/' + this.Id + '">Edit</a></div>';
            });

我的路线是这样的,

routes.MapRoute(
                "Default",                                           
                "{controller}/{action}/{id}",                         
                new { controller = "Materials", action = "Index", id = "" } 
            );

【问题讨论】:

    标签: asp.net-mvc url-routing detailsview


    【解决方案1】:

    我建议你的网址是

    http://localhost:1985/Materials/Details/2/Steel
    

    这似乎也是 SO 显示其 URL 的方式。

    您的路线将被定义为

    routes.MapRoute(
      "action with slug", 
      "{controller}/{action}/{id}/{slug}",
      new {controller = "Error", action = "NotFound", id = "", slug = ""}
    );
    
    routes.MapRoute(
      "Default",                                           
      "{controller}/{action}/{id}",                         
      new { controller = "Materials", action = "Index", id = "" } 
    );
    

    回答 cmets 中的第二个问题“如何从链接中删除详细信息?” 如果要删除 ACTION 名称,因此 URL 只是 http://site/controler/id/slug,请在带有 slug 路由的操作之前添加以下路由。

    routes.MapRoute(
      "controller with slug", 
      "Materials/{id}/{slug}",
      new {controller = "Materials", action = "Details", id = "", slug = ""}
    );
    

    将捕获单词 steel 的“slug”将被操作忽略,因为无论如何您只希望 Id 检索材料。

    创建一个路由链接而不是一个操作链接,像这样

    <%= Html.RouteLink(material.Name,
          "show with slug", 
          new { controller = "Materials", 
                action = "Details", 
                id = material.Id, 
                slug = Server.HtmlDecode(material.Name).Replace(" ","-")
          }) 
    %>
    

    我将 'slug' 中的空格替换为连字符,这样它们就不会被浏览器替换为 %20。

    您的详细信息 ActionResult 将保持不变。

    【讨论】:

    • @jason 我正在使用 jquery 迭代 json 数据并通过 jquery 添加详细信息链接.....这是我使用的 &lt;a href="/Materials/Details/' + this.Id + '/' + this.Mat_Name + '"&gt;Details&lt;/a&gt; 但这似乎不起作用......跨度>
    • @jason 但如果我使用&lt;a href="/Materials/Details/' + this.Id + '"&gt;Details&lt;/a&gt; it works and i am redirected localhost:1985/Materials/Details/2`
    • 您的路线映射是什么样的?它们的顺序可能是个问题。
    • @jason 如何从路线中去除细节?
    • 这条额外的路线能满足您的需求吗?
    猜你喜欢
    • 1970-01-01
    • 2013-04-12
    • 2010-11-22
    • 2010-11-13
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多