У меня есть приложение 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; }
}
Как видите, здесь нет ничего необычного. Да и кстати: проверка диапазона на FloatValue
тоже не работает.