编辑器对于字节和短整型呈现不同的内容



为什么 EditorFor 为字节和短整型渲染不同的类和输入类型,如下所示:

<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"是可为空的字节,"Start_Year_Period"是可为空的短字节,如下所示:

    [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>

我没有编辑器模板,所以为什么!!

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

它的呈现方式不同,因为在 System.Web.Mvc.Html.TemplateHelpers 中定义的_defaultEditorActions的私有集合中没有 shortSystem.Int16 类型的特定模板。它只有以下各项的默认值:

    "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 框架没有其他方式为您呈现默认输入标记。

若要使short数据类型的特定呈现,请将文件Int16添加到视图文件夹下的 EditorTemplates 文件夹或包含以下内容的共享文件夹下

@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; }

这基本上指示模板助手将模板用于int类型(或完整System.Int32

最新更新