我有一个Asp.net MVC应用程序,其特定视图的模型具有float
属性。
我的服务器区域设置说,
是十进制符号,当我编辑模型并在文本框中输入 7,5 并将其发布到服务器时,它可以正常工作。默认模型绑定器能够按预期将此值绑定到七个半。
但是当我使用<%= this.Model.FloatValue %>
显示相同的值时,十进制符号将转换为.
,这意味着<%= %>
显然会忽略服务器区域设置。
因此。那我怎么解决这个问题呢?应该使用哪种语言环境?服务器系统区域设置,表示小数符号为,
或浏览器区域设置设置为en-gb
,这意味着.
是十进制符号。
反正。我只是想让它可靠地工作。
我的控制器操作:
public ActionResult Settings()
{
Settings result = this.Service.GetActiveSettings();
return View(result);
}
[HttpPost]
[HandleModelStateException]
public ActionResult Settings(Settings data)
{
if (!this.ModelState.IsValid)
{
throw new ModelStateException(); // my custom exception which isn't important here
}
Settings result = this.Service.SaveSettings(data);
return Json(result);
}
使用$.ajax()
异步调用第二个。
局部视图的相关部分:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Settings>" %>
<div class="data">Float value: <strong><%= this.Model.FloatValue %></strong></data>
<div class="data">Integer value: <strong><%= this.Model.IntValue %></strong></data>
...
我的任何模特课:
/// <summary>
/// Represents application specific settings.
/// </summary>
public class Settings
{
/// <summary>
/// Gets or sets the integer value.
/// </summary>
/// <value>Integer value.</value>
[Required(ErrorMessageResourceType = typeof(Resources.Settings), ErrorMessageResourceName = "QuotaRequired")]
[Range(0, 365*24, ErrorMessageResourceType = typeof(Resources.Settings), ErrorMessageResourceName = "QuotaRange")]
public int IntValue { get; set; }
[Required(ErrorMessageResourceType = typeof(Resources.Settings), ErrorMessageResourceName = "WorkdayRequired")]
[Range(.5, 24.0, ErrorMessageResourceType = typeof(Resources.Settings), ErrorMessageResourceName = "WorkdayRange")]
public float FloatValue { get; set; }
}
正如您所看到的,这里没有什么不寻常之处。哦和BTW:FloatValue
上的范围验证也不起作用。
答案 0 :(得分:0)
您是否尝试停用基于客户端的文化?您可以在web.config,system.web部分找到它。
<globalization enableClientBasedCulture="false" />
答案 1 :(得分:0)
CultureInfo
最后,我使用ToString()
方法并提供适当的文化信息。我不得不提供更多代码,但它按预期工作:
<%= this.Model.FloatValue.ToString(new System.Globalization.CultureInfo("sl-SI") %>
当我需要在同一视图上多次使用此文化信息时,我只需创建一个视图变量并存储它,然后将其重复用于每个实例。