ASP.NET RazorでのHTML.ActionLinkとUrl.Action


回答:


508

はい、違いがあります。タグをHtml.ActionLink生成しますが、URLのみを返します。<a href=".."></a>Url.Action

例えば:

@Html.ActionLink("link text", "someaction", "somecontroller", new { id = "123" }, null)

生成する:

<a href="/somecontroller/someaction/123">link text</a>

そしてUrl.Action("someaction", "somecontroller", new { id = "123" })生成する:

/somecontroller/someaction/123

子コントローラーアクションを実行するHtml.Actionもあります。


14
@ PankajUpadhyay、asp.net mvcアプリケーションでURLを処理するときは、常にHTMLまたはURLヘルパーを使用する必要があります。数百のリンクがある場合でも、を使用Html.ActionLinkしてリンクを生成します。このようなマイクロ最適化を行わないでください。あなたはあなたの見解で醜いコードになってしまうでしょう。
Darin Dimitrov

2
datは、リンクのレンダリングが関係するすべての状況で、Url.ActionよりもHtml.ActionLink()を優先する必要があることを意味します。ところで、なぜasp.net WebサイトのMicrosoft公式チュートリアル(MVCミュージックストア)は、リンクが必要なときは常にUrl.Actionを使用したのですか。
Pankaj Upadhyay、2011年

7
@PankajUpadhyay、アンカータグ(<a>)を生成する必要がある場合はHtml.ActionLinkを使用します。URLのみを生成する必要がある場合は、Url.Actionを使用します(これはコントローラーアクションでも使用できます)。
Darin Dimitrov、

3
@Shimmy、ここでそれを読むことができます:haacked.com/archive/2009/11/17/aspnetmvc2-render-action.aspx
Darin Dimitrov

3
これは古い記事ですが、経験から学んだことは知っています。Url.Actionは、よりもはるかに優れていますHtml.ActionLink。2つある6,000アイテムのリストがありましたHtml.ActionLinks。リストのレンダリングには6,600ミリ秒かかりました。それなしHtml.ActionLinksでは52msかかりました。使用Url.Actionに270msかかりました。確かに、6000アイテムは大きなリストですが、将来の参照用に追加するつもりです。
roberocity

42

Html.ActionLink<a href=".."></a>タグを自動的に生成します。

Url.Action URLのみを生成します。

例えば:

@Html.ActionLink("link text", "actionName", "controllerName", new { id = "<id>" }, null)

生成する:

<a href="/controllerName/actionName/<id>">link text</a>

そして

@Url.Action("actionName", "controllerName", new { id = "<id>" }) 

生成する:

/controllerName/actionName/<id>

気に入っているベストプラスポイント Url.Action(...)

アンカータグを独自に作成して、他のHTMLタグを使用しても簡単に独自のリンクテキストを設定できるようにします。

<a href="@Url.Action("actionName", "controllerName", new { id = "<id>" })">

   <img src="<ImageUrl>" style"width:<somewidth>;height:<someheight> />

   @Html.DisplayFor(model => model.<SomeModelField>)
</a>

12
<p>
    @Html.ActionLink("Create New", "Create")
</p>
@using (Html.BeginForm("Index", "Company", FormMethod.Get))
{
    <p>
        Find by Name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
        <input type="submit" value="Search" />
        <input type="button" value="Clear" onclick="location.href='@Url.Action("Index","Company")'"/>
    </p>
}

上記の例では、特定のアクションを実行するために特にボタンが必要な場合は@ Url.Actionを使用する必要があるのに対し、リンクだけが必要な場合は@ Html.ActionLinkを使用することがわかります。ポイントは、アクションURLが使用されている要素(HTML)を使用する必要がある場合です。


10

@HTML.ActionLinkを生成しHTML anchor tagます。が@Url.Action生成さURLれます。簡単に理解できます。

// 1. <a href="https://stackoverflow.com/ControllerName/ActionMethod">Item Definition</a>
@HTML.ActionLink("Item Definition", "ActionMethod", "ControllerName")

// 2. /ControllerName/ActionMethod
@Url.Action("ActionMethod", "ControllerName")

// 3. <a href="https://stackoverflow.com/ControllerName/ActionMethod">Item Definition</a>
<a href="@Url.Action("ActionMethod", "ControllerName")"> Item Definition</a>

これらのアプローチは両方とも異なり、それは完全にあなたの必要性に依存します。


2

適切なCSSスタイルを使用して、Html.ActionLinkをボタンとして簡単に表示できます。例えば:

@Html.ActionLink("Save", "ActionMethod", "Controller", new { @class = "btn btn-primary" })

5
これは、HTML.ActionLinkとUrl.Actionの違いは何であるかについての元の質問には答えていないようです。おそらく、回答の代わりにコメントを使用する必要があります。
Fencer04 2016

あなたの答えは元のクエリを楽しませるものではありません。
Arsman Ahmad

0

以下のコードを使用してボタンを作成しましたが、うまくいきました。

<input type="button" value="PDF" onclick="location.href='@Url.Action("Export","tblOrder")'"/>

1
もう一度質問を読んでください。@Pankaj Upadhyayはまったく違うことを求めています。
Arsman Ahmad
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.