【问题标题】:HTML.ActionLink vs Url.Action in ASP.NET RazorASP.NET Razor 中的 HTML.ActionLink 与 Url.Action
【发布时间】:2011-12-04 06:31:53
【问题描述】:

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

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

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 razor


    【解决方案1】:

    是的,有区别。 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 网站上的微软官方教程(MVC 音乐商店)在需要链接时大部分时间都使用 Url.Action。
    • @PankajUpadhyay,当您需要生成锚标记 (&lt;a&gt;) 时使用 Html.ActionLink。当您只需要生成一个 url 时使用 Url.Action(这也可以在控制器操作中使用)。
    • 我知道这是一篇旧帖子,但从经验中学到了一些东西。 Url.ActionHtml.ActionLink 性能好得多。我有一个包含 2 个 Html.ActionLinks 的 6,000 个项目的列表。渲染列表花费了 6,600 毫秒。没有Html.ActionLinks 需要 52 毫秒。使用Url.Action 花了 270 毫秒。诚然,6000 项是一个很大的列表,但我想我会添加它以供将来参考。
    【解决方案2】:

    Html.ActionLink 自动生成&lt;a href=".."&gt;&lt;/a&gt; 标签。

    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>
    

    【讨论】:

      【解决方案3】:
      <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)时。

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

          • 这似乎没有回答关于 HTML.ActionLink 与 Url.Action 之间的区别的原始问题。也许您应该使用评论而不是答案。
          • 您的回答与原始查询不符。
          【解决方案6】:

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

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

          【讨论】:

          • 我认为,您必须再次阅读问题。 @Pankaj Upadhyay 提出了完全不同的问题。
          猜你喜欢
          • 2021-08-19
          • 2011-06-03
          • 1970-01-01
          • 1970-01-01
          • 2018-01-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-15
          相关资源
          最近更新 更多