我在 ASP.NET MVC 视图上有几个隐藏的输入。它们的值包含类型的对象double
。我希望它们被渲染为InvariantCulture
因为它们通常被提供给客户端上的 api(谷歌地图)。现在,它们使用逗号 (,) 作为小数分隔符来呈现,而 api 需要使用点 (.) 作为小数分隔符。
最好的解决方案是如果我可以在DisplayFormat
模型属性上的数据注释属性,但我认为这是不可能的:
public class Position
{
[DisplayFormat(DataFormatString="{0:G}, CultureInfo.InvariantCulture")]
public double Latitude;
...
}
我也不能只设置CurrentCulture
to InvariantCulture
in my Application_Start
方法,因为屏幕上还有其他值必须符合正确的用户文化。
那么,在我做某事之前,有没有办法暂时改变当前的文化?Html.HiddenFor(Model => Model.Latitude)
对于该特定属性,然后重置它?
或者还有其他更好的方法吗?与此相关的最佳实践是什么?
实现此目的的一种方法是编写自定义编辑器模板~/Views/Shared/EditorTemplates/InvariantDouble.cshtml
:
@{
object modelValue = string.Format(
System.Globalization.CultureInfo.InvariantCulture,
ViewData.ModelMetadata.DisplayFormatString,
ViewData.ModelMetadata.Model
);
}
@Html.TextBox("", modelValue, new { @class = "text-box single-line" })
然后在你的模型上:
[DisplayFormat(DataFormatString="{0:G}")]
[UIHint("InvariantDouble")]
public double Latitude;
最后根据你的观点:
@Html.EditorFor(x => x.Latitude)
或者如果您希望应用程序中的所有双打都像这样使用~/Views/Shared/EditorTemplates/Double.cshtml
没有任何UIHint
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)