1

私は ASP.NET MVC5 で Web サイトを作成しており、非常にエキサイティングなフレームワークのように見えるMaterializeCSSを初めて使用しています。

ただし、CheckBoxFor ヘルパーによって生成されたチェックボックスは非表示になります。
私が書くとき:

@Html.CheckBoxFor(m => m.IsAgreeTerms)

生成された HTML は次のとおりです。

<input name="IsAgreeTerms" type="hidden" value="false">

type=checkboxマテリアライズが myを に変更するのはなぜtype=hiddenですか? CheckboxFor ヘルパー
を追加しようとしましたが、何も変わりません。type="checkbox"唯一の方法は、ブラウザのコンソールで変更することです。

私が見つけた唯一の解決策は、この SO threadです。ただし、受け入れられた答えは私にとって何も変わりません。
他の答えはうまくいきますが、マテリアライズが私の同意なしに変更するものを変更するためにJSスクリプトを追加するのは見苦しいと思います。

「ねえ、私は を求めているので、生成された HTML でtype=checkbox私を許可してください」と言う方法はありますか?type=checkbox

ありがとうございました


更新:
私の完全な ASP.NET MVC コードは次のとおりです。

@Html.CheckBoxFor(m => m.IsAgreeTerms, new { @type = "checkbox" })
@Html.LabelFor(m => m.IsAgreeTerms, new { @class = "login-label" })

生成された完全な HTML は

<input data-val="true" data-val-required="Le champ IsAgreeTerms est requis." id="IsAgreeTerms" name="IsAgreeTerms" type="checkbox" value="true"
<input name="IsAgreeTerms" type="hidden" value="false">
<label class="login-label" for="IsAgreeTerms">IsAgreeTerms</label>
4

3 に答える 3

0

OPはこちら。問題はより複雑に見えます。

実際、 を使用する@Html.CheckBoxForと、MVC5 は次の順序で 3 つのフィールドを生成します。

  • type="checkbox"モデル プロパティにバインドされた を使用した入力
  • 隠しフィールド (説明については、Claudio のリンクを参照してください)
  • によって生成されたあなたのラベル@Html.LabelFor

問題はMaterialize、別の順序で動作することを期待しています。
ブラウザーのコンソールで<label>、入力フィールドと非表示フィールドの間に要素を移動するだけで、すべて正常に動作します!

この非常に便利なリンクを見つけました。ここでは、基本的に、生成されたフィールドの順序@Html.checkBoxForが変更されると言われています... MVC6で!

私はMVC5で作業しているので、この非常に醜いソリューションを私の_Layout.

$(":checkbox").each(function () {
    $(this).nextAll("label").before($(this))
})

誰かがより良いアイデアを持っている場合は、エレガントなソリューションを投稿してください。

于 2016-11-12T19:38:23.893 に答える
0

materialize.css によって生成された他の html はありますか? タイプチェックボックスの要素入力にカスタムCSSを適用できないために、これが発生すると思います。

そのため、チェックボックスは非表示になり、他の html コンポーネントはチェックボックスを視覚的に表します。多くのコンポーネントがそのように機能します。

更新: Html チェックボックスが追加の隠し入力を生成するのはなぜですか

于 2016-11-12T14:57:40.700 に答える