ASP.NET Razor中的HTML.ActionLink与Url.Action

时间:2011-10-10 05:54:23

标签: asp.net-mvc asp.net-mvc-3 razor

HTML.ActionLinkUrl.Action之间是否存在差异,或者他们只是两种做同样事情的方式?

我应该何时优先选择其中一个?

6 个答案:

答案 0 :(得分:459)

是的,有区别。 Html.ActionLink生成<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执行子控制器操作。

答案 1 :(得分:39)

Html.ActionLink会自动生成<a href=".."></a>代码。

Url.Action仅生成网址。

例如:

@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>

答案 2 :(得分:11)

<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。 关键是当你必须使用一些元素(HTML)时,使用动作url。

答案 3 :(得分:7)

@HTML.ActionLink生成HTML 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>

这两种方法都不同,完全取决于您的需要。

答案 4 :(得分:2)

您可以使用适当的CSS样式轻松地将 Html.ActionLink 显示为按钮。 例如:

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

答案 5 :(得分:0)

我使用下面的代码创建了一个Button,它对我有用。

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