3

次に示すように、EditorFor が byte と short で異なるクラスと入力タイプをレンダリングするのはなぜですか。

<div class="form-group">
    <input class="text-box single-line" data-val="true" 
        data-val-number="The field Num Year / Period must be a number."
        id="NumYear_Period" name="NumYear_Period" type="number" value="" />
</div>

<div class="form-group">
    <input class="form-control" data-val="true" 
        data-val-number="The field Start Year must be a number." 
        id="Start_Year_Period" name="Start_Year_Period" type="text" value="" />
</div>

"NumYear_Period" は Nullable Byte で、"Start_Year_Period" は Nullable Short です。

    [Display(Name = "Num Year / Period")]
    public Nullable<byte> NumYear_Period { get; set; }

    [Display(Name = "Start Year")]
    public Nullable<short> Start_Year_Period { get; set; }

Create.cshtml ビューには次が含まれます。

<div class="form-group">
    @Html.EditorFor(model => model.NumYear_Period)
</div>
<div class="form-group">
    @Html.EditorFor(model => model.Start_Year_Period)
</div>

私には EditorTemplates がありません。

Bootstrap、Visual Studio 2013 Update 1、MVC 5.1.1、.Net 4.5、Razor 3.1.1 の使用

4

1 に答える 1

2

short タイプまたはで定義されSystem.Int16た のプライベート コレクションに特定のテンプレートがないため、レンダリングが異なります。次のデフォルトのみがあります。_defaultEditorActionsSystem.Web.Mvc.Html.TemplateHelpers

    "HiddenInput",
    "MultilineText",
    "Password",
    "Text",
    "Collection",
    "PhoneNumber",
    "Url",
    "EmailAddress",
    "DateTime",
    "Date",
    "Time",
    typeof(byte).Name,
    typeof(sbyte).Name,
    typeof(int).Name,
    typeof(uint).Name,
    typeof(long).Name,
    typeof(ulong).Name,
    typeof(bool).Name,
    typeof(decimal).Name,
    typeof(string).Name,
    typeof(object).Name,

EditorFor テンプレートがないことを既に述べたように、MVC フレームワークがデフォルトの入力タグをレンダリングする方法は他にありません。

データ型の特定のレンダリグを作成するには、ビュー フォルダーまたは Shared フォルダーの下の EditorTemplates フォルダーに、次の内容shortのファイルを追加します。Int16

@model short

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @type = "number" }) 

shortこれにより、モデルのタイプが次のようにレンダリングされます

<input ..... type="number" ... />

UIHintまたは、次のようにモデル プロパティを装飾することもできます。

[Display(Name = "Start Year")]
[UIHint("Int32")]
public Nullable<short> Start_Year_Period { get; set; }

これは基本的に、型のテンプレートを使用するように TemplateHelper に指示しますint(またはSystem.Int32完全に)

于 2014-06-27T17:03:35.130 に答える