HTML.ActionLink
与 Url.Action
之间有什么区别,或者它们只是做同一件事的两种方式?
我什么时候应该更喜欢其中一个?
是,有一点不同。 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 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>
@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>
这两种方法都是不同的,完全取决于您的需要。
<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)时。
您可以使用适当的 CSS 样式轻松地将 Html.ActionLink 呈现为按钮。例如:
@Html.ActionLink("Save", "ActionMethod", "Controller", new { @class = "btn btn-primary" })
我使用下面的代码创建了一个 Button,它对我有用。
<input type="button" value="PDF" onclick="location.href='@Url.Action("Export","tblOrder")'"/>
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 个项目是一个很大的列表,但我想我会添加它以供将来参考。