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


Answers:


508

是,有一点不同。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执行子控制器动作。


14
@PankajUpadhyay,在asp.net mvc应用程序中处理URL时,应始终使用html或url帮助器。即使您拥有百分之一的链接,也可以使用Html.ActionLink它们来生成它们。不要尝试进行此类微优化。您最终将在自己的视图中看到难看的代码。
Darin Dimitrov

2
dat表示在涉及链接时,在所有情况下我都应该首选Html.ActionLink()而不是Url.Action。顺便说一句,那为什么为什么在需要链接的情况下,asp.net网站上的Microsoft官方教程(MVC音乐商店)经常使用Url.Action。
Pankaj Upadhyay,

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.ActionHtml.ActionLink。我列出了6,000个项目,其中有2个Html.ActionLinks。花费了6600毫秒来渲染列表。没有Html.ActionLinks它花了52毫秒。使用Url.Action它花费了270毫秒。当然,有6000项是一个很大的列表,但我想我会添加它以供将来参考。
roberocity '18

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。关键是当您必须使用某些元素(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 '16

您的答案不符合原始查询。
Arsman Ahmad

0

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

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

1
我认为,您必须再次阅读该问题。@Pankaj Upadhyay在问完全不同的事情。
Arsman Ahmad
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.