46

私の見解では、次のActionLinkがあります

<%= Html.ActionLink("LinkText", "Action", "Controller"); %>

次のURLを作成しますhttp://mywebsite.com/Controller/Action

http://mywebsite.com/Controller/Action/53のように最後にIDを追加して、ページに移動するとします。このページには、上記で指定したマークアップがあります。これで、URLを見ると、次のようになります。

http://mywebsite.com/Controller/Action/53(IDの追加に注意してください)

しかし、IDを削除して、元のように見せたいです。たとえば、 http://mywebsite.com/Controller/Action(ここにIDがないことに注意してください)

これを修正する方法はありますか?コントローラ/アクションが変更される可能性があるため、ハードコードされたURLを使用したくありません。

4

9 に答える 9

13

2 番目の「Action Only」ルートを登録し、Html.RouteLink() を使用する必要があるようです。最初に、アプリケーションの起動時に次のようなルートを登録します。

routes.MapRoute("ActionOnly", "{controller}/{action}", 
   new { controller = "Home", action = "Index" } );

次に、これらのリンクを作成する ActionLink の代わりに、次を使用します。

Html.RouteLink("About","ActionOnly")
于 2010-04-28T14:57:33.987 に答える
10

問題は、組み込みのメソッドが、現在使用している URL と指定した URL から入力を取得することです。これを試すことができます:

<%= Html.ActionLink("LinkText", "Action", "Controller", new { id = ""}) %>

id パラメータを手動でワイプする必要があります。

于 2009-04-23T08:38:40.927 に答える
4

理由はわかりませんが、うまくいきませんでした (Mvc2 RC が原因かもしれません)。urlhelper メソッドを作成 =>

 public static string
            WithoutRouteValues(this UrlHelper helper, ActionResult action,params string[] routeValues)
        {
            var rv = helper.RequestContext.RouteData.Values;
            var ignoredValues = rv.Where(x=>routeValues.Any(z => z == x.Key)).ToList();
            foreach (var ignoredValue in ignoredValues)
                rv.Remove(ignoredValue.Key);
            var res = helper.Action(action);
            foreach (var ignoredValue in ignoredValues)
                rv.Add(ignoredValue.Key, ignoredValue.Value);
            return res;
        }
于 2010-01-21T13:03:31.740 に答える
4

明示的にオーバーライドする必要がある値がわからない場合、またはパラメーターの余分なリストを避けたい場合は、以下のような拡張メソッドを使用できます。

<a href="@Url.Isolate(u => u.Action("View", "Person"))">View</a>

実装の詳細は、このブログ投稿にあります

于 2013-08-21T17:21:08.007 に答える
3

別の方法は、ActionLink(HtmlHelper、String、String、RouteValueDictionary)オーバーロードを使用することです。その後、最後のパラメーターにnullを入れる必要はありません。

<%= Html.ActionLink("Details", "Details", "Product", new RouteValueDictionary(new { id=item.ID })) %>
于 2010-08-26T13:25:08.857 に答える