为什么在ASP.NET MVC 3中IntelliSense中没有@Html.Button?

81
我看到了关于@Html.Button()的参考资料,但是当我输入它时,智能感知却找不到这样的帮助程序……有下拉列表、隐藏、编辑器等,但没有按钮!为什么会这样呢?

1
你在哪里看到这样的引用? - SLaks
1
我理解保持一致性的愿望,但实际上并没有必要(没有需要编码或保护)。所以,这只是一种冗长的方式来编写单个HTML标记:'@Html.Button("myButton", new { @class = "myClass"})'与'<button class="myClass">myButton</button>'相比。 - Russell Horwood
4
@Russel - 我不同意你的观点- 我已经在MvcHtmlString上创建了扩展方法来禁用、使只读和隐藏DOM元素。因为没有按钮的HTML助手,我无法使用我的扩展方法。说“不需要”有点短视,可能是天真的想法。 - barrypicker
5个回答

70

我已经编写了自己的 HTMLButton 扩展,你可以使用它:

public static class HtmlButtonExtension 
{

  public static MvcHtmlString Button(this HtmlHelper helper, 
                                     string innerHtml, 
                                     object htmlAttributes) 
  { 
    return Button(helper, innerHtml,
                  HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)
    ); 
  }

  public static MvcHtmlString Button(this HtmlHelper helper, 
                                     string innerHtml,
                                     IDictionary<string, object> htmlAttributes)
  {
      var builder = new TagBuilder("button");
      builder.InnerHtml = innerHtml;
      builder.MergeAttributes(htmlAttributes);
      return MvcHtmlString.Create(builder.ToString());
  }
}

当我使用上述代码时,出现以下错误:“'HtmlHelper<dynamic>'不包含名为'Button'的定义,也没有接受类型为'HtmlHelper<dynamic>'的第一个参数的扩展方法'Button'可以找到(您是否缺少使用指令或程序集引用?)”我将扩展放在了namespace System.Web.Mvc.Html中。 - Legends

9

9

进一步解释已接受的答案,所以您可以绑定提交按钮到一个模型属性,但可以有不同的文本:

@Html.ButtonFor(m => m.Action, Model.LabelForCurrentAction(), new { @class = "btn btn-primary btn-large", type = "submit" })

使用以下略作修改的

8

MVC5,Bootstrap版本为3.2.0

@Html.ActionLink
(
    linkText: " Remove", 
    actionName: "Index", 
    routeValues: null, // or to pass some value -> routeValues: new { id = 1 },
    htmlAttributes: new { @class = "btn btn-success btn-sm glyphicon glyphicon-remove" }
)

这将生成一个看起来像按钮的链接。

2
这不会创建一个按钮,而是一个看起来像按钮的链接。 - SMUsamaShah

1

1
这似乎很奇怪吧?特别是如果它很简单,为什么不为了完整性而包含它呢? - ekkis
1
你是否在视图顶部包含了扩展命名空间的导入语句?这通常是问题所在。你可能需要确保你的视图编译通过(右键点击项目,选择卸载。右键编辑文件-将MvcBuildViews设置为true。保存并关闭,右键点击重新加载项目并再次编译)。 - Adam Tuliper
1
创建一个名为“extensions”的文件夹。将htmlextensions.cs类添加到其中(确保命名空间正确),然后在您的视图中使用:@using Yourapp.Extensions。如果遇到问题,请使用记事本启用MvcBuildViews。 - Adam Tuliper
“使用已注册为allowDefinition='MachineToApplication'的部分超出应用程序级别是错误的”,我还没有弄清楚。有一些建议认为,拥有两个Web.Config文件(可能在子文件夹中有一个)会导致此问题,但这不是我的问题。还有一种说法是必须为IIS配置应用程序,尽管我正在无问题地部署到IIS Express,所以我不确定那是否是问题... - ekkis
1
Ekkis,不确定你在项目中做了什么,但是你需要执行以下操作来创建HtmlHelperExtension:1)创建一个静态类(我称之为HtmlHelperExtensions)2)在该类中制作公共方法,注释为<Extension ()>,并具有适当的签名。3)返回MvcHtmlString.Create()。请参阅此帖子以获取有用且功能强大的示例:https://dev59.com/3m445IYBdhLWcg3wXZIy - Ben Finkel
显示剩余9条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接