かみそりビューの内部では、ラベルのレンダリングにモデルを使用しました
@Html.LabelFor(model => model.MyName, htmlAttributes: new { @class = "control-label col-md-6" })
そして今、私はデータ注釈属性の代わりにその値を使用したい。値なので、DisplayForなどで試しました
@Html.DisplayFor(model => model.MyName, new { @class = "control-label col-md-6" })
このcssクラスcontrol-label col-md-6
は適用されません。どうして?
DisplayFor
は、他の*For
ヘルパーとは異なります。 EditorFor
と同様に、「テンプレート化されたヘルパー」と呼ばれるものです。つまり、レンダリングするものは、変更可能なテンプレートによって制御されます。重要なのは、これらのメソッドの両方について、MSDNでドキュメントを検索すると、通常は他のヘルパーのhtmlAttributes
に対応するパラメーターが、代わりにadditionalViewData
を参照することがわかりますこの二つ。これは、繰り返しますが、出力はViewData
を取る基本的にビューによって制御されるためです。
さらに、特にDisplayFor
を使用すると、デフォルトのテンプレートはHTMLなしで値を出力するだけです。たとえば、文字列プロパティを渡すと、出力はその文字列の値になり、それ以外の値はなくなります。したがって、たとえHTML属性を渡すことができたとしても、HTML属性を結び付けるものは何もありません。
あなたがしようとしていることをしたい場合は、カスタム表示テンプレートを作成する必要があります。これは、 types (例:String
、Boolean
、Byte
など)または DataType
enum (CreditCard
、EmailAddress
など)、Views\Shared\DisplayTemplates
に。たとえば、Views\Shared\DisplayTemplates\String.cshtml
でビューを作成した場合、DisplayFor
型のプロパティを使用してstring
を呼び出すと、そのビューがレンダリングに使用されます。次に、選択したHTMLに直接出力される値をラップし、ViewData
を使用して適切なHTML属性を適用できます。例えば:
<span class="@ViewData["class"]">@ViewData.TemplateInfo.FormattedModelValue</span>
違いは、@Html.LabelFor
ヘルパー関数は<label></label>
タグ、および@Html.DisplayFor
ヘルパー関数はhtmlタグをレンダリングせず、代わりにプレーンテキストをレンダリングします。たとえば、次のコード:
@Html.DisplayFor(model => model.MyName, new { @class = "control-label col-md-6" })
生のテキストを返します:
Martin
myNameの値が「Martin」であることを考慮してください。そしてコード:
@Html.LabelFor(model => model.MyName, htmlAttributes: new { @class = "control-label col-md-6" })
戻ります:
<label class="control-label col-md-6">Martin</label>
違いを考慮してください。
次を使用します(@ Html.DisplayForを使用する場合)。
<span class"control-label col-md-6">@Html.DisplayFor(model => model.MyName)</span>
ここでのゲームに遅れましたが、Razor Templateがそれらを表示する方法と比較して、チェックボックスを巨大にする必要がありました。ユーザーにチェックされているかどうかを確認してほしかったからです。
私は上記のものを試してみましたが、うまくいきませんでした。そこで、Chrome Developer Toolを使用してページのレンダリング内容を確認し、チェックボックスに次のように表示しました。
input[type="radio"], input[type="checkbox"] {
box-sizing: border-box;
padding: 0;
}
そして、すべてのチェックボックスを大きくすることができるので、CSSファイルでそれを見つけに行きました。しかし、それはここにあると言いました:
reboot.scss:373
今、私は開発者で最初に開いたときに別のscssファイルを参照していることを誓います。しかし、私にはギリシャ語のように見えたので、コードがずさんなので、これを(上記のスタイルで試した後)Razorページの一番上に置くことにしました。上記の非表示スタイルを複製し、幅と高さを追加したことに注意してください。
<style>
input[type="radio"],
input[type="checkbox"] {
box-sizing: border-box;
width: 40px;
height:40px;
}
</style>
さて、ここに私が表示していたRazorコントロールがあります。最後にhtmlのチェックボックスとして表示されますが、Razor Pageは、それがTrue/Falseフィールドであり、テキストボックスとして表示されることを知るのに十分賢いと思います。だが。 。 。追加したサイジングを適用する前ではありません!!これが誰かを助けることを願っています。
<td>
@Html.DisplayFor(modelItem => item.Moderated)
</td>