2016年9月7 日に編集
これは機能しません
@Html.CheckBoxFor(model => model.ProvidePracticalSuggestions,
new { name = "help_practicalSuggestions" })
しかし、これは機能します
@Html.CheckBoxFor(model => model.ProvidePracticalSuggestions,
new { Name = "help_practicalSuggestions" })
秘訣は大文字を使用すること"N"
です"Name"
これは可能ではないと思います。name
HTML Helperメソッドを使用している場合、チェックボックス要素の属性を変更することはできません。不思議なことに、MVCソースコードを調べたところ、メソッドから呼び出されているメソッドからInputHelper
呼び出されているメソッド内で何か面白いものが見つかりました。CheckBoxHelper
CheckBoxFor

type
「 」、「」、「」name
のMergeAttributeメソッドを呼び出していvalue
ます。そして、このコードはチェックボックス要素専用です
編集:MergeAttributeメソッドを調べました。これがその方法です。
public void MergeAttribute(string key, string value)
{
bool flag = false;
this.MergeAttribute(key, value, flag);
}
それで、それはクラスの呼び出しMergeAttribute
であり、TagBuilder
それはこのように見えます
public void MergeAttribute(string key, string value, bool replaceExisting)
{
if (!string.IsNullOrEmpty(key))
{
if (replaceExisting || !this.Attributes.ContainsKey(key))
{
this.Attributes[key] = value;
}
return;
}
else
{
throw new ArgumentException(CommonResources.Argument_Cannot_Be_Null_Or_Empty, "key");
}
}
そして、最初のIf
条件はtrueを返し、innerif
は(私が推測する)コレクションname
に存在するため、trueを返しません。したがって、ステートメントをAttributes
実行するだけです。return
解決策Html.CheckBoxFor
:ヘルパーメソッドを使用する代わりに、このHtml.CheckBox
メソッドを使用することもできます。
public static MvcHtmlString CheckBox(
this HtmlHelper htmlHelper,
string name
)
したがって、コードは次のようになります
@Html.CheckBox("help_practicalSuggestions",Model.ProvidePracticalSuggestions)
最初のパラメーターは、入力要素に付ける名前です。
また、他の回答の1つで説明されているように、andを使用するnew { @Name="MyCustomName"}
と、渡した名前のチェックボックス要素が生成されます。ただし、この名前の非表示の入力フィールドは生成されません。非表示フィールドは、モデルのプロパティ名と同じ名前のままになります。CheckboxFor
ヘルパーメソッドは通常、この非表示フィールドにチェックボックスの選択された/選択されていない値を格納するための非表示フィールドを生成します。したがって、両方のフィールド(チェックボックスとそれに関連付けられた非表示フィールド)の名前を同じにすることが重要です。
したがって、最善の解決策はHtml.CheckBox
ヘルパーメソッドを使用することです。これにより、非表示フィールドの適切な名前も生成されます。