6

次のようなASP.NETMVC コードのプレビュー4を使用します。

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

出力のみ:

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

nameフォームのポストバックにはありますがid、JavaScriptやラベルにはありません:-(

私はそれを次のように変更することを望んでいました:

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

動作しますが、代わりに例外が発生します:

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

コレクションのどこかにすでにIDがあったかのように-私は困惑しています!

興味のある人のための完全な例外は次のとおりです(ちょっと-ここにファイルを添付するのはいいことではないでしょう):

System.ArgumentException:同じキーを持つアイテムがすでに追加されています。
   System.ThrowHelper.ThrowArgumentException(ExceptionResourceリソース)で
   System.Collections.Generic.Dictionary`2.Insert(TKey key、TValue value、Boolean add)で
   System.Web.Routing.RouteValueDictionary.Add(String key、Object value)で
   System.Web.Mvc.TagBuilder2.CreateInputTag(HtmlInputType inputType、String name、RouteValueDictionary属性)で
   System.Web.Mvc.CheckBoxBuilder.CheckBox(String htmlName、RouteValueDictionary htmlAttributes)で
   System.Web.Mvc.CheckBoxBuilder.CheckBox(String htmlName、String text、String value、Boolean isChecked、RouteValueDictionary htmlAttributes)で
   System.Web.Mvc.CheckBoxExtensions.CheckBox(HtmlHelperヘルパー、文字列htmlName、文字列テキスト、文字列値、ブールisChecked、オブジェクトhtmlAttributes)
   ASP.views_account_termsandconditions_ascx .__ Render__control1(HtmlTextWriter __w、Control parameterContainer)のc:\ dev \ myProject \ Views \ Account \ Edit.ascx:line 108
4

2 に答える 2

5

これを試して:

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

どのキーワードでも、属性名の前にアンダースコアを使用できます。クラスの代わりに_classを使用します。classはC#のキーワードであり、HTMLの属性の名前でもあるため。現在、「id」はC#のキーワードではありませんが、サポートしたい別の.NET言語である可能性があります。私の知る限り、これはVB.NET、F#、またはRubyのキーワードではないため、アンダースコアを使用するように強制されるのは間違いかもしれません。

于 2008-08-11T22:26:29.177 に答える
0

どうやらこれはバグです。彼らはそれを潜在的なレンダリング値に追加しているので、それを含めるのを忘れていました。codeplexでバグを作成し、ソースをダウンロードして必要に応じて変更することをお勧めします。

于 2008-08-11T20:12:48.963 に答える