0

私はMVC3アプリケーションに取り組んでいます。

私の見解では、アンカーリンクに@Html.ActionLinkを使用しています。すべてが正常に機能しています。ただし、これらのリンクには、現在のURLのパラメータがリンクに含まれています。

私の現在のリンクがhttp://localhost:25466/Blog/all/2

生成されているアクションリンクはhttp://localhost:25466/Blog/Blog/shoes/2

上記のリンクでは、実際にはURLに「2」を含めることは何もしていません。しかし、それでも追加されています。

私のルート設定は

routes.MapRoute(
                "Blog", "Blog/Blog/{tag}/{id}",
            new { controller = "Blog", action = "Blog", tag = UrlParameter.Optional,id="1" }
            );

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = "1" },
                constraints: new { id = @"\d+" }
            );

そして私の行動は

 public ActionResult All(int id)
        {
            var context = new BlogCore.DbContext.BlogContext();
            var list = context.Get(id,20);
            return View(list);
        }

        public ActionResult Blog(string tag,int id)
        {
            var context = new BlogCore.DbContext.BlogContext();
            var list = context.Get(HttpUtility.UrlEncode(tag), id, 20);
            return View("All", list);
        }

そしてこれが私がactionlinkを使ってアンカーリンクを生成する方法です

@Html.ActionLink(blog.PostTitle, "Blog", "Blog", new { tag = blog.PostRewriteName }, null)

アクションリンクで2を回避するにはどうすればよいですか。

前もって感謝します。

4

2 に答える 2

1

次のように、そのパラメータを明示的に設定する必要があると思います。

@Html.ActionLink(blog.PostTitle, "Blog", "Blog", new { tag = blog.PostRewriteName, id = 1 }, null)

ActionLinkでリンクを作成するときは、実際のビューディクショナリが考慮されていると思います。

于 2012-11-13T02:11:50.100 に答える
1

MVCは、URLを生成するルートを見つけるときに、現在のクエリ文字列の変数を使用します。したがって、変数IDが含まれます。これを回避するには、ActionLinkヘルパーに渡すルートデータでidをnullに明示的に設定する必要があります。

@Html.ActionLink(blog.PostTitle, "Blog", "Blog", new { tag = blog.PostRewriteName, id = null }, null)
于 2012-11-13T07:23:01.573 に答える