【发布时间】:2011-12-04 06:31:53
【问题描述】:
HTML.ActionLink 与 Url.Action 之间有什么区别,或者它们只是做同一件事的两种方式?
我什么时候应该更喜欢其中一个?
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 razor
HTML.ActionLink 与 Url.Action 之间有什么区别,或者它们只是做同一件事的两种方式?
我什么时候应该更喜欢其中一个?
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 razor
是的,有区别。 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 执行子控制器动作。
【讨论】:
Html.ActionLink 来生成它们。不要试图做这样的微优化。你最终会在你的视图中看到丑陋的代码。
<a>) 时使用 Html.ActionLink。当您只需要生成一个 url 时使用 Url.Action(这也可以在控制器操作中使用)。
Url.Action 比 Html.ActionLink 性能好得多。我有一个包含 2 个 Html.ActionLinks 的 6,000 个项目的列表。渲染列表花费了 6,600 毫秒。没有Html.ActionLinks 需要 52 毫秒。使用Url.Action 花了 270 毫秒。诚然,6000 项是一个很大的列表,但我想我会添加它以供将来参考。
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>
【讨论】:
<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)时。
【讨论】:
@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>
这两种方法都不同,完全取决于您的需要。
【讨论】:
您可以使用适当的 CSS 样式轻松地将 Html.ActionLink 呈现为按钮。 例如:
@Html.ActionLink("Save", "ActionMethod", "Controller", new { @class = "btn btn-primary" })
【讨论】:
我使用下面的代码创建了一个按钮,它对我有用。
<input type="button" value="PDF" onclick="location.href='@Url.Action("Export","tblOrder")'"/>
【讨论】: