为什么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”是可以为空的字节,“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
答案 0 :(得分:1)
呈现方式不同,因为short
中定义的System.Int16
私有集合中的_defaultEditorActions
或System.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框架无法为您呈现默认输入标记。
要为short
数据类型创建特定的renderig,请将文件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; }
基本上指示TemplateHelper使用int
类型的模板(或完全System.Int32