关于asp.net mvc:如何在MVC中使用HtmlHelper获取呈现的自定义ID

关于asp.net mvc:如何在MVC中使用HtmlHelper获取呈现的自定义ID

How do you get a custom id to render using HtmlHelper in MVC

使用ASP.NET MVC预览4
像这样的代码:

1
<%= Html.CheckBox("myCheckBox","Click Here","True", false ) %>

仅输出:

1
<input type="checkbox"  value="True"  name="myCheckBox"  />

表单回传有name,而javascript或标签没有id :-(

我希望将其更改为:

1
2
Html.CheckBox("myCheckBox","Click Here",
              "True", false, new { id="myCheckBox" } )

会工作-但我得到一个例外:

1
System.ArgumentException: An item with the same key has already been added.

好像某个集合中某处已经有一个ID-我很困惑!

感兴趣的人的完整例外说明如下(嘿-在这里附加文件不是很好):

1
2
3
4
5
6
7
8
9
System.ArgumentException: An item with the same key has already been added.
   at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at System.Web.Routing.RouteValueDictionary.Add(String key, Object value)
   at System.Web.Mvc.TagBuilder2.CreateInputTag(HtmlInputType inputType, String name, RouteValueDictionary attributes)
   at System.Web.Mvc.CheckBoxBuilder.CheckBox(String htmlName, RouteValueDictionary htmlAttributes)
   at System.Web.Mvc.CheckBoxBuilder.CheckBox(String htmlName, String text, String value, Boolean isChecked, RouteValueDictionary htmlAttributes)
   at System.Web.Mvc.CheckBoxExtensions.CheckBox(HtmlHelper helper, String htmlName, String text, String value, Boolean isChecked, Object htmlAttributes)
   at ASP.views_account_termsandconditions_ascx.__Render__control1(HtmlTextWriter __w, Control parameterContainer) in c:\\dev\\myProject\\Views\\Account\\Edit.ascx:line 108

尝试这个:

1
<%= Html.CheckBox("myCheckbox","Click here","True", false, new {_id ="test" })%>

对于任何关键字,可以在属性名称前使用下划线。 您可以使用_class代替class。 由于class是C#中的关键字,因此也是HTML中属性的名称。 现在," id"不是C#中的关键字,但也许它是他们想要支持的另一种.NET语言。 据我所知,它不是VB.NET,F#或Ruby中的关键字,因此强迫他们在其上使用下划线可能是一个错误。


显然这是一个错误。 因为他们将其添加到潜在的渲染值中,所以他们只是忘了包含它。 我建议在Codeplex上创建一个错误,然后下载源代码并根据需要进行修改。


推荐阅读