2

リンク プロパティを含めるようにモデルを拡張しています。リンクを生成するために、その中の他のプロパティに基づいています。

public partial class MyModelType
{
    public string FilterLink
    {
        get
        {
            var u = new UrlHelper(HttpContext.Current.Request.RequestContext);
            var route = new RouteValueDictionary(u.RequestContext.RouteData.Values);
            route.Remove("other");
            route.Add("other", null);
            route.Add("id", this.Id);
            return u.Action("Index", "ControllerName", route);
        }
    }
}

生成されたリンクは/ControllerName/1?other=2. を取り除くとroute.Remove("other")、マップされたルートに基づいてリンクが取得されます: /ControllerName/1/2。ルートから削除されたときにクエリ文字列パラメーターとして使用されないようにするにはどうすればよいですか? ルート値ではありませんが、UrlHelper は何らかの形で追加しているようです。

4

2 に答える 2

0

ルーティング構成を確認してください。

MVC ルーティングは、ルートの不明な部分をそのように追加するため、事前に定義している限り、問題なく機能するはずです。

あなたはおそらくこれを持っています:

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

option次のように追加してみてください。

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}/{option}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, option = UrlParameter.Optional }
    );
于 2013-08-09T06:53:27.373 に答える
0

この問題はここで議論されています: http://erraticdev.blogspot.com/2011/03/removing-route-values-from-linksurls-in.html

ただし、ブログの提案は、コメントの単純な解決策と比較して複雑です。DEFAULT ルートのデフォルト値に「other = null as object」を追加します。

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, other = null as object }
);
于 2014-05-12T18:09:21.577 に答える