12

ヘルパーを使用して URL が自動生成されるときUrl.Action、ページに次のような行が含まれている場合

@Url.Action("編集","学生")

のような URL を生成し、期待どおりに機能することが期待domain/student/editされます。しかし、リクエストされた URL に のようなパラメータが含まれている場合domain/student/edit/210、メソッドにそのようなパラメータを提供していなくても、上記のコードは前のリクエストのこれらのパラメータを使用して同様のものを生成しますAction

つまり、要求された URL にパラメーターが含まれている場合、ページの自動生成されたリンク (その要求に対して提供される) には、Url.Actionメソッドで指定するかどうかに関係なく、それらのパラメーターも含まれます。

何がうまくいかないのですか?

4

4 に答える 4

20

この同様の質問からのダーリンの回答を使用してください。

@Url.Action("Edit","Student", new { ID = "" })
于 2012-10-25T19:24:44.103 に答える
9

奇妙なことに、問題を再現できないようです:

public class HomeController : Controller
{
    public ActionResult Index(string id)
    {
        return View();
    }

    public ActionResult About(string id)
    {
        return View();
    }
}

そして内部Index.cshtml

@Url.Action("About", "Home")

/home/index/123URLヘルパーをリクエストする/home/aboutと、期待どおりに生成されます。ゴースト パラメータはありません。では、シナリオはどのように異なりますか?


アップデート:

シナリオを明確にしたので、次のようになります。

public class HomeController : Controller
{
    public ActionResult Index(string id)
    {
        return View();
    }
}

そして、あなたが使用しようとしている内部Index.cshtml

@Url.Action("Index", "Home")

これを要求すると、期待される(または単にデフォルト値が考慮される)代わりに/home/index/123生成されます。/home/index/123/home/index/

この動作は仕様です。変更したい場合は、現在のルート データを無視する独自のヘルパーを作成する必要があります。これは次のようになります。

@UrlHelper.GenerateUrl(
    "Default", 
    "index", 
    "home", 
    null, 
    Url.RouteCollection, 
    // That's the important part and it is where we kill the current RouteData
    new RequestContext(Html.ViewContext.HttpContext, new RouteData()), 
    false
)

これにより、期待していた適切な URL が生成されます。もちろん、これは醜いです。再利用可能なヘルパーにカプセル化することをお勧めします。

于 2011-07-14T08:21:14.660 に答える
0

パラメータを使用して null を指定する ActionLink オーバーロードを使用する

于 2011-07-14T08:51:12.173 に答える