MVC 5のコードは次のとおりです。
@Html.EditorFor(model => model.myfloatvalue, new { @type = "number", @min = "0", @step = "0.01", @value = "0" })
そして、これがhtmlコードです。
<input class="text-box single-line" data-val="true" data-val-number="The field Fix Amount must be a number." data-val-required="The Fix Amount field is required." id="myfloatvalue" name="myfloatvalue" type="text" value="">
しない
<input class="text-box single-line" data-val="true" data-val-number="The field Fix Amount must be a number." data-val-required="The Fix Amount field is required." id="myfloatvalue" name="myfloatvalue" type="number" min="0" step="0.01" value="0">
私は何をすべきか?
ご連絡ありがとうございます!
匿名オブジェクトを別の匿名オブジェクトのhtmlAttributes
でラップしようとしましたか? EditorFor
/TextBoxFor
を使用する場合、MVC 5がエディターによるHTML属性出力に影響を与える唯一の方法であると考えています。
_@Html.EditorFor(model => model.myfloatvalue, new { htmlAttributes = new { @type = "number", @min = "0", @step = "0.01", @value = "0" }})
_
MVC-5.1以降を使用していない場合は、TextBoxFor()
を使用する必要があります。ここではhtmlAttributes
を使用しないことに注意してください。
_@Html.TextBoxFor(m => m.myfloatvalue, new { type = "number", min = "0", step = "0.01" }) // don't set the value attribute
_
float
のEditorForのデフォルトの動作を実際に変更して、_type="number"
_の代わりに_type="text"
_を生成することができます。
そのためには、EditorTemplate
にカスタムSingle
を追加する必要があります(notfloat
)次のように_/Views/Shared/EditorTemplates/Single.cshtml
_と入力します。
_@model Single?
@{
var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(ViewData["htmlAttributes"]);
if (!attributes.ContainsKey("type")) { attributes.Add("type", "number"); }
}
@Html.TextBoxFor(m => m, attributes)
_
これが機能する理由は、float
が_System.Single
_のC#エイリアスであるためです(詳細については Microsoft c#言語リファレンス を参照してください)。 Float.cshtmlというEditorTemplate
を追加しても機能しません(試しました...)。
これについては、@ Stephen Muecke の優れた回答 ここでの私の質問 からアイデアを得ました。また、独自のHtmlHelper
拡張を作成して、@Html.FloatFor(...)
を記述できるようにするというアイデアについても言及しています。
この同じアプローチは、Decimal
とDouble
にも適用できます。どちらもデフォルトで_type="text"
_をレンダリングします。