12

「名前」属性を自分に追加しようとしていますが、CheckBoxFor機能させることができません。

@Html.CheckBoxFor(
model => model.ProvidePracticalSuggestions, 
new { @name = "help_practicalSuggestions" 
                })

私がここで間違っていることについて何か考えはありますか?

レンダリングされたHTML:

<div>
      <input data-val="true" data-val-required="The Provide practical suggestions for implementing change, e.g. step-by-step best practices field is required." id="ProvidePracticalSuggestions" name="ProvidePracticalSuggestions" type="checkbox" value="true" /><input name="ProvidePracticalSuggestions" type="hidden" value="false" />
       <span class="field-validation-valid" data-valmsg-for="ProvidePracticalSuggestions" data-valmsg-replace="true"></span>
       <label for="ProvidePracticalSuggestions">Provide practical suggestions for implementing change, e.g. step-by-step best practices</label>
</div>
4

8 に答える 8

28

2016年9月7 日に編集

これは機能しません

@Html.CheckBoxFor(model => model.ProvidePracticalSuggestions,
                                              new { name = "help_practicalSuggestions"   })

しかし、これは機能します

@Html.CheckBoxFor(model => model.ProvidePracticalSuggestions,
                                              new { Name = "help_practicalSuggestions"   })

秘訣は大文字を使用すること"N"です"Name"


これは可能ではないと思いますnameHTML Helperメソッドを使用している場合、チェックボックス要素の属性を変更することはできません。不思議なことに、MVCソースコードを調べたところ、メソッドから呼び出されているメソッドからInputHelper呼び出されているメソッド内で何か面白いものが見つかりました。CheckBoxHelperCheckBoxFor

ここに画像の説明を入力してください

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ヘルパーメソッドを使用することです。これにより、非表示フィールドの適切な名前も生成されます。

于 2012-07-24T20:07:42.413 に答える
16

それはできません。の要点CheckBoxForは、を自動生成することnameです。自分の名前が必要な場合は、

@Html.CheckBox("help_practicalSuggestions", Model.ProvidePracticalSuggestions)
于 2012-07-24T20:06:53.517 に答える
16

実際には、以下に示すように「@Name」(大文字のN)を使用するだけで、すべてうまくいくはずです。:)

@Html.CheckBoxFor(
model => model.ProvidePracticalSuggestions,
         new { @Name = "help_practicalSuggestions"})

乾杯!

于 2013-08-21T21:36:47.113 に答える
1

名前に@記号は必要ありません

@Html.CheckBoxFor(
model => model.ProvidePracticalSuggestions, 
new { name = "help_practicalSuggestions" })
于 2012-07-24T19:50:47.320 に答える
0

一時変数を作成し、それをラムダ式に渡すだけです。

@{var help_practicalSuggestions = Model.ProvidePracticalSuggestions; } 
@Html.CheckBoxFor(model => help_practicalSuggestions)

アップデート

SergRogovtsevは実際には正しいです。ヘルパー関数の「...For」バージョンは、name属性を自動的に提供します。

于 2012-11-05T20:48:52.097 に答える
0

@なしで試してください:

@Html.CheckBoxFor(model => model.ProvidePracticalSuggestions, new { name = "help_practicalSuggestions" })
于 2012-07-24T19:50:32.203 に答える
0

CheckBoxForヘルパーでは、式を使用してコントロールをプロパティにバインドします。プロパティ名は、コントロールのname属性を設定するために使用されます。

@Html.CheckBoxFor(model => model.IsMarried)

チェックボックスを使用してモデルプロパティをバインドすると、以下に示すように、コントロールのname属性にプロパティ名自体が割り当てられます。

レンダリングされたHTML:

<input id="IsMarried" name="IsMarried" type="checkbox" value="true" />
<input name="IsMarried" type="hidden" value="false" />

おそらく、CheckBoxヘルパーを使用して名前属性を指定するか、必要に応じて属性を割り当てることができる独自のカスタムヘルパーメソッドを作成できます。

詳細については、以下をご覧ください。

http://20fingers2brains.blogspot.in/2013/02/html-checkboxfor-helper-in-mvc3-razor.html

于 2013-03-31T16:52:10.743 に答える
0

まず、呼び出したモデルにフィルターを追加しますDisplayAttribute

[DisplayAttribute(Name = "Some Text")]
public bool IsChecked { get; set; }

そして、あなたはモデルにラベルを使うことができます

@Html.LabelFor(model => model.PropertyName)
于 2013-11-06T05:54:04.797 に答える