8

これは好奇心のためだけです

このコードが機能する理由:

Html.TextBoxFor(x => x.Age, new { @Value = "0"})

そしてこれはしません:

Html.TextBoxFor(x => x.Age, new { @value = "0"})

大文字の「V」に注意してください@Value

valueはキーワードであることを知っていますが、そうですreadonly、そしてそれは機能します。使用する必要はありません@Readonly(大文字の「R」を使用)。

誰か手がかりがありますか?

4

3 に答える 3

6

InputExtensions.TextBoxFor特殊なケースでは、いくつかの属性名がありますvalue(大文字と小文字が区別されます)。これはC#キーワードとは関係ありません。

特に、パラメータから取得した値は、パラメータに渡すexpressionというプロパティよりも優先されます。valuehtmlAttributes

あなたの例を見てみましょう:

  • 使用Html.TextBoxFor(x => x.Age, new { @value = "0"})するとコンパイルされますが、評価される値で属性TextBoxForがオーバーライドされます。valuex.Age

  • これを使用Html.TextBoxFor(x => x.Age, new { @Value = "0"})するとコンパイルされ、属性ディクショナリに2つのエントリが取得されます。1つはで、もう1Value"0"valueですx.Age

    出力はのような無意味なものになると思い<input Value="0" value="..." type="text"/>ます。

于 2013-01-03T17:03:53.483 に答える
3

100%確信はありませんが、それはvalueプロパティのキーワードである可能性がありますが、そうでreadonlyはありません。MSDNのプロパティを見てください。

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

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

于 2013-01-03T16:21:56.883 に答える
0

私の推測では、MVCコードは検索するようにハードコーディングされています。Valueこれは、MSエンジニアが常にPascalCaseプロパティ名を使用することを意図していたためです。これは、PascalCaseが一般的な規則であり、PascalCaseがなどの非コンテキストキーワードとの競合を回避するためclassです。PascalCaseプロパティがHTMLで小文字としてレンダリングされる方法に注目してください。

理由はvalue、キーワードであるということではありません。これは、C#ではコンテキストキーワードであり、プロパティのゲッターとセッターでは特別な意味しか持たないためです(したがって、IDEでは青色になります)。に渡される匿名型では特別な意味はありませんTextBoxFor

于 2013-03-07T12:54:36.443 に答える