我的ViewModel中有一个类型为“float”的属性。它显示为TextBox,默认值为“0”。
我在“共享”文件夹中添加了一个“EditorTemplates”文件夹&创建了一个新的“Float.cshtml”文件,其中包含以下内容:
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue == 0 ? "" : ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line" })
但是,当我运行应用程序时,仍会显示浮动字段,默认值为0.
由于
更新的 我只是想看看ASP.NET如何对自定义模板做出反应,到目前为止,引擎还没有处理我的自定义模板,类似于:
LatLng.cshtml
@model float
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line "}) Latitude
在ViewModel上,
[UIHint("LatLng")]
public float? Latitude { get; set; }
在视图上,
@Html.EditorFor(model => model.Latitude)
没有任何变化,正在使用默认模板。
答案 0 :(得分:5)
Float实际上不是.NET类型,它是C#类型。 Float映射到System.Single,因此您需要创建Single.cshtml而不是Float.cshtml。
您还可以通过在模型数据上指定UIHint属性,或指定要在Editor或EditorFor方法中使用的模板来解决此问题。
答案 1 :(得分:0)
一个简单的解决方法是,如果您只是设置ViewData.TemplateInfo.FormattedModelValue以返回模型中的字符串,那么您不必在视图上执行那种奇怪的逻辑。如果你需要它回发一个新值(用于编辑目的),你只需要在控制器中添加一些逻辑来将字符串变回浮点数。