2

ビュー ページの 1 つにアクション リンクがあります。

<%=Html.ActionLink("Details", "Details", new { id = Model.Id })%>これの代わりにこのようなURLを持つページに私をリダイレクトしますIdの代わりにマテリアル名http://localhost:1985/Materials/Details/2として私のURLを持ちたいhttp://localhost:1985/Materials/Details/steelです...これは可能ですか...これは私のコントローラアクションメソッドです.

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

1 に答える 1

2

URL は次のようにすることをお勧めします。

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

コメントの 2 番目の質問「リンクから詳細を削除するにはどうすればよいですか?」への回答として。ACTION 名を削除したい場合は、URL がhttp://site/controler/id/slug.

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

鋼という単語をキャプチャする「スラッグ」は、アクションによって無視されます。これは、いずれにせよ Id が材料を取得することだけが必要だからです。

このように、アクション リンクの代わりにルート リンクを作成します。

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

「スラッグ」のスペースをハイフンに置き換えて、ブラウザーによって %20 に置き換えられないようにします。

詳細 ActionResult は同じままです。

于 2010-05-06T04:13:51.270 に答える