为什么 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
的私有集合中没有 short
或 System.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
)