ChatGPT解决这个技术问题 Extra ChatGPT

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

HTML.ActionLinkUrl.Action 之间有什么区别,或者它们只是做同一件事的两种方式?

我什么时候应该更喜欢其中一个?


D
Darin Dimitrov

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


@PankajUpadhyay,在 asp.net mvc 应用程序中处理 url 时,您应该始终使用 html 或 url 助手。即使您有百分之一的链接,也可以使用 Html.ActionLink 来生成它们。不要试图做这样的微优化。你最终会在你的视图中看到丑陋的代码。
dat 意味着在渲染链接时,在所有情况下我都应该更喜欢 Html.ActionLink() 而不是 Url.Action。顺便说一句,那么为什么 asp.net 网站上的 Microsoft 官方教程(MVC 音乐商店)在需要链接时大部分时间都使用 Url.Action。
@PankajUpadhyay,当您需要生成锚标记 (<a>) 时使用 Html.ActionLink。当您只需要生成一个 url 时使用 Url.Action(这也可以在控制器操作中使用)。
我知道这是一篇旧帖子,但从经验中学到了一些东西。 Url.ActionHtml.ActionLink 性能好得多。我有一个包含 2 个 Html.ActionLinks 的 6,000 个项目的列表。渲染列表花费了 6,600 毫秒。没有 Html.ActionLinks 需要 52 毫秒。使用 Url.Action 花了 270 毫秒。当然,6000 个项目是一个很大的列表,但我想我会添加它以供将来参考。
E
Emile Bergeron

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>

A
Arsman Ahmad

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

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


m
mason
<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)时。


I
Ivin Raj

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

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

这似乎没有回答关于 HTML.ActionLink 与 Url.Action 之间的区别的原始问题。也许您应该使用评论而不是答案。
您的回答不符合原始查询。
A
Aneel Goplani

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

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

我想,你必须再读一遍这个问题。 @Pankaj Upadhyay 在问完全不同的事情。