web-dev-qa-db-ja.com

ASP.NET RazorにおけるHTML.ActionLinkとUrl.Action

HTML.ActionLinkUrl.Actionの間に違いはありますか、それとも同じことをする2つの方法にすぎませんか?

どちらを優先するべきですか。

271
Pankaj Upadhyay

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

例えば:

@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 もあり、これは子コントローラのアクションを実行します。

457
Darin Dimitrov

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>
38
Pranav Labhe
<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)を使用する必要がある場合です。

11
Rohit Singh

@HTML.ActionLinkHTML anchor tagを生成します。 @Url.ActionはあなたのためにURLを生成します。あなたは簡単にそれを理解することができます。

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

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

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

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

7
Arsman Ahmad

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

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

以下のコードを使ってButtonを作成しましたが、それは私にとって役に立ちました。

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