Asp.net mvc 4 editorfor选择字符串模板而不是双精度模板

Asp.net mvc 4 editorfor选择字符串模板而不是双精度模板,asp.net-mvc-4,mvc-editor-templates,Asp.net Mvc 4,Mvc Editor Templates,我的项目中有一个视图模型存在一些问题,该模型中包含许多双视图 即 在我看来,我有 @Html.EditorForModel 如果在我的项目中没有其他自定义模板,这将正确呈现,并且我会得到一个文本框,其中有一个双精度 只要我在View/Shared/EditorTemplate中放入一个字符串模板,并在其中放入任何内容,该模板中的任何内容都将被呈现,而不是双模板 @using System.Globalization @functions { private object Format

我的项目中有一个视图模型存在一些问题,该模型中包含许多双视图

在我看来,我有

@Html.EditorForModel
如果在我的项目中没有其他自定义模板,这将正确呈现,并且我会得到一个文本框,其中有一个双精度

只要我在View/Shared/EditorTemplate中放入一个字符串模板,并在其中放入任何内容,该模板中的任何内容都将被呈现,而不是双模板

@using System.Globalization
@functions {

    private object FormattedValue
    {
        get
        {
            if (ViewData.TemplateInfo.FormattedModelValue == ViewData.ModelMetadata.Model)
            {
                return String.Format(CultureInfo.CurrentCulture, "{0:0.00}", ViewData.ModelMetadata.Model);
            }
            return ViewData.TemplateInfo.FormattedModelValue;
        }
    }

}

@Html.TextBox("", FormattedValue, new {@class = "text-box single-line"})
我会认为,即使我覆盖了字符串模板,选择模板的顺序也会保持不变,并且双模板会像字符串模板存在之前一样被选择

字符串模板仅包含(无@model)

我在这里遗漏了什么,为什么在这里选择字符串模板

在这两种情况下,选择的都是字符串模板。double类型没有默认模板。以下是默认字符串模板的外观:

@Html.TextBox(
    "", 
    ViewData.TemplateInfo.FormattedModelValue,
    new { @class = "text-box single-line" }
)
我已经决定可以在views共享文件夹中放置双模板 它会呈现出这样的效果,但看起来我不该这么做 那样做


好吧,如果您对双精度类型的默认模板(即
string.cshtml
)不满意,您可以随时为其编写自定义模板。

您比我快!我假设有一个内置的模板,它有点难说,没有,除了这种行为!你认为他们没有提供双重模板有什么原因吗?不,我不认为有什么特别的原因。可能不需要。对货币之类的东西使用十进制更为常见。因此,他们为Decimal类型提供了一个模板。
@using System.Globalization
@functions {

    private object FormattedValue
    {
        get
        {
            if (ViewData.TemplateInfo.FormattedModelValue == ViewData.ModelMetadata.Model)
            {
                return String.Format(CultureInfo.CurrentCulture, "{0:0.00}", ViewData.ModelMetadata.Model);
            }
            return ViewData.TemplateInfo.FormattedModelValue;
        }
    }

}

@Html.TextBox("", FormattedValue, new {@class = "text-box single-line"})
@Html.TextBox(
    "", 
    ViewData.TemplateInfo.FormattedModelValue,
    new { @class = "text-box single-line" }
)