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

Pan*_*yay 290 asp.net-mvc razor asp.net-mvc-3

HTML.ActionLinkvs 之间有什么区别,Url.Action或者只是两种方式做同样的事情?

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

Dar*_*rov 487

是,有一点不同.Html.ActionLink生成<a href=".."></a>标记,而Url.Action只返回一个网址.

例如:

@Html.ActionLink("link text", "someaction", "somecontroller", new { id = "123" }, null)
Run Code Online (Sandbox Code Playgroud)

产生:

<a href="/somecontroller/someaction/123">link text</a>
Run Code Online (Sandbox Code Playgroud)

Url.Action("someaction", "somecontroller", new { id = "123" })生成:

/somecontroller/someaction/123
Run Code Online (Sandbox Code Playgroud)

还有Html.Action执行子控制器操作.

  • @PankajUpadhyay,在asp.net mvc应用程序中处理url时,你应该总是使用html或url帮助器.即使你拥有百分之一的链接,也可以使用`Html.ActionLink`来生成它们.不要试图做这样的微优化.您最终会在视图中看到丑陋的代码. (14认同)
  • @PankajUpadhyay,当你需要生成一个锚标记(`<a>`)时使用Html.ActionLink.需要仅生成URL时使用Url.Action(这也可以在控制器操作中使用). (6认同)
  • @Shimmy,你可以在这里阅读:http://haacked.com/archive/2009/11/17/aspnetmvc2-render-action.aspx (3认同)
  • dat意味着在渲染链接时,我应该在所有情况下优先使用Html.ActionLink()而不是Url.Action.顺便说一句,那么为什么每当需要链接时,asp.net网站上的微软官方教程(MVC Music Store)都会使用Url.Action. (2认同)
  • 我知道这是一篇旧文章,但可以从经验中学到一些东西。“ Url.Action”比“ Html.ActionLink”具有更高的性能。我有一个包含2个“ Html.ActionLinks”的6,000个项目的列表。花费了6600毫秒来渲染列表。如果没有`Html.ActionLinks`,则需要52毫秒。使用`Url.Action`花费了270毫秒。当然,有6000个项目是一个很大的列表,但我想将其添加以供将来参考。 (2认同)

Pra*_*bhe 40

Html.ActionLink<a href=".."></a>自动生成标签.

Url.Action 只生成一个网址.

例如:

@Html.ActionLink("link text", "actionName", "controllerName", new { id = "<id>" }, null)
Run Code Online (Sandbox Code Playgroud)

产生:

<a href="/controllerName/actionName/<id>">link text</a>
Run Code Online (Sandbox Code Playgroud)

@Url.Action("actionName", "controllerName", new { id = "<id>" }) 
Run Code Online (Sandbox Code Playgroud)

产生:

/controllerName/actionName/<id>
Run Code Online (Sandbox Code Playgroud)

我喜欢的最佳加分是使用 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>
Run Code Online (Sandbox Code Playgroud)


小智 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>
}
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,您可以看到如果我特别需要一个按钮来执行某些操作,我必须使用@ Url.Action,而如果我只想要一个链接,我将使用@ Html.ActionLink.关键是当你必须使用一些元素(HTML)时,使用动作url.


Ars*_*mad 9

@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>
Run Code Online (Sandbox Code Playgroud)

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


小智 5

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

@Html.ActionLink("Save", "ActionMethod", "Controller", new { @class = "btn btn-primary" })
Run Code Online (Sandbox Code Playgroud)

  • 这似乎并没有回答关于 HTML.ActionLink 与 Url.Action 之间的区别的原始问题。也许您应该使用评论而不是答案。 (6认同)