在ASP.NET MVC 3中没有调用“Floats”的EditorTemplate

时间:2012-03-30 17:41:27

标签: asp.net-mvc-3

我的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)

没有任何变化,正在使用默认模板。

2 个答案:

答案 0 :(得分:5)

Float实际上不是.NET类型,它是C#类型。 Float映射到System.Single,因此您需要创建Single.cshtml而不是Float.cshtml。

您还可以通过在模型数据上指定UIHint属性,或指定要在Editor或EditorFor方法中使用的模板来解决此问题。

答案 1 :(得分:0)

一个简单的解决方法是,如果您只是设置ViewData.TemplateInfo.FormattedModelValue以返回模型中的字符串,那么您不必在视图上执行那种奇怪的逻辑。如果你需要它回发一个新值(用于编辑目的),你只需要在控制器中添加一些逻辑来将字符串变回浮点数。