【问题标题】:Convert an HTML button to ActionLink将 HTML 按钮转换为 ActionLink
【发布时间】:2009-09-22 10:09:17
【问题描述】:

我有一个 html 按钮设置并使用一组所需的属性运行,我想将其转换为基于文本的链接。此外,为了让自己熟悉工作的 html 助手和智能感知,我想看看如何将这些属性硬塞到 ActionLink 中:

<input type="button" id="RemoveRegistration_Submit<%=row.ID %>" 
value="Remove From Cart" 
onclick="$('#Step2_RemoveRegistrationForm input[name=id]').val('<%=row.ID %>'); $('#Step2_RemoveRegistrationForm').submit();" 
align="right" />

谢谢

【问题讨论】:

  • 问题的重点是理解如何将上面的代码转换成ActionLink。

标签: asp.net-mvc helpers actionlink


【解决方案1】:

按钮不能像没有 javascript 的链接一样。
一般来说 - 这是一种不好的做法(搜索引擎无法正确索引您的页面等)。

我建议你使用锚标签,让它们看起来像一个按钮。

但如果你真的需要它——this 文章提供了答案。

编辑:

对不起。我的回答有点太快了。

这不是你要问的(不涉及 HtmlHelper),但这就是我解决这个问题的方法:

在视图中我会定义锚(没有 href 的锚确实通过了 W3 验证):

<a id='removefromcart_<%=row.ID%>' title='Remove from cart' 
   class='remove-link' />

在外部 javascript 文件中:

   var onclick = function(event){
        event.preventDefault();
        var link = $(event.targetSource());

        //tag ids should be injected through view asp/cx
        $('#Step2_RemoveRegistrationForm input[name=id]') 
            .val(link.attr('id').split('_')[1])
    };
    $('a[id^=removefromcart]').click(onclick);  

在css中:

 a {cursor:pointer;} /*anchors without href by default haven't pointer*/

我认为在 HtmlHelpers 中使用 javascript 会很麻烦。

EDIT2:

锚文本在标签内定义。我总是混淆这一点。而且似乎 targetSource() is wrong 也是。尝试重写它:event.targetSource()=>event.target.

【讨论】:

  • 我正在寻找反向...我想要一个按钮看起来像一个链接。
  • 我已经按原样尝试了代码,但在 和结束 之间没有一些文本,我看不到任何东西是如何变得可见/可点击的。我已添加:remove from cart 现在链接可见,但没有任何反应点击。谢谢
  • 对不起 - 你是对的。添加文本 - 在开始和结束标签之间添加它。什么都没有发生,因为您没有添加 javascript,在文档准备好时没有调用它或其中有错误(我没有检查它,只是写下我记得的方式)。
【解决方案2】:

应该没那么难......但我认为你的意思是 Html.Link 因为 ActionLink 意味着你需要从路由表生成链接。

<%= Html.Link("Remove from Cart", "#", new {onclick = "#Step2_RemoveRegistrationForm input[name=id]').val('<%=row.ID %>'); $('#Step2_RemoveRegistrationForm').submit();"}) %>
  • 参数#1:链接文本
  • 参数#2:href
  • 参数#3:htmlAttributes

    public static string Link(this HtmlHelper htmlHelper, string linkText, string href, object htmlAttributes) {

    TagBuilder tagBuilder = new TagBuilder("a"){ InnerHtml = linkText; }

    tagBuilder.MergeAttributes(htmlAttributes);

    tagBuilder.MergeAttributes("href", href);

    return tagBuilder.ToString(TagRenderMode.Normal);

    }

并且不要忘记在视图上 以便使用扩展方法。

【讨论】:

  • 我可以让您扩展“Link”与“ActionLink”的用法吗? Html.Link 抛出一个错误:'...不包含'Link'的定义并且没有扩展方法'Link'...... Intellesense 没有列出'Link'。我正在反对 MVC 的发布版本 - 这是 Futures 的一部分吗?
  • 是一种简单的扩展方法。我会发帖的。
猜你喜欢
  • 2012-06-05
  • 2016-12-28
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
  • 2021-09-14
  • 2018-11-03
相关资源
最近更新 更多