fre*_*tje 6 c# asp.net-mvc formatting culture render
我在asp.net mvc视图上有几个隐藏的输入.它们的值包含类型的对象double.我希望它们能够被渲染,InvariantCulture因为它们习惯于被提供给客户端上的api(谷歌地图).就像现在一样,它们以逗号(,)作为小数分隔符进行渲染,而api则希望将点(.)作为小数分隔符.
最好的解决方案是,如果我可以DisplayFormat在模型的属性上的数据注释属性中指定文化,但我认为这不可能:
public class Position
{
[DisplayFormat(DataFormatString="{0:G}, CultureInfo.InvariantCulture")]
public double Latitude;
...
}
Run Code Online (Sandbox Code Playgroud)
我也不能在我的方法中设置CurrentCultureto ,因为屏幕上还有其他值必须在适当的用户文化中.InvariantCultureApplication_Start
那么,有没有办法暂时改变当前的文化,就在我Html.HiddenFor(Model => Model.Latitude)为特定属性做一个之前,然后重置它?
或者还有另一种更好的方法吗?什么是最佳做法?
我最终为Position模型中的特定子对象创建了一个模板(Position.chtml),如下所示:
@model Models.Position
@{
var latitude = string.Format(System.Globalization.CultureInfo.InvariantCulture,
"{0:G}", Model.Latitude);
var longitude = string.Format(System.Globalization.CultureInfo.InvariantCulture,
"{0:G}", Model.Longitude);
}
@Html.Hidden("Latitude", latitude)
@Html.Hidden("Longitude", longitude)
<p />
<div id="mapCanvas"></div>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/maps.js")"></script>
<script type="text/javascript">
$(function () {
attachMap($('#mapCanvas'), $('#Position_Latitude'), $('#Position_Longitude'), true);
})
</script>
Run Code Online (Sandbox Code Playgroud)
这样,我不需要向模型类添加任何属性。
但我想知道...包括这样的 javascript 是个好习惯吗?我不知道有任何其他方法可以做到这一点(除了将其包含在母版页中,我不想这样做,因为我不需要在所有页面上都使用它)而不必重复自己。我想保持这个干燥...
另外(我最好为此问一个新问题):就像现在一样,我有这个模板两次,一次作为编辑器模板,一次作为显示模板。唯一的区别是最后一个参数必须attachMap用于true编辑器模板和false显示模板。有没有简单的方法可以让这个变干?
| 归档时间: |
|
| 查看次数: |
2187 次 |
| 最近记录: |