Asp.net MVC выпуск десятичного символа

У меня есть приложение 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 тоже не работает.

2 ответа

Решение

Использование пользовательских CultureInfo при преобразовании в строку

В конце концов я использовал ToString() метод и предоставить соответствующую информацию о культуре. Мне пришлось предоставить немного больше кода, но он работает, как и ожидалось:

<%= this.Model.FloatValue.ToString(new System.Globalization.CultureInfo("sl-SI") %>

И когда мне нужно использовать эту информацию о культуре несколько раз в одном и том же представлении, я просто создаю переменную представления и сохраняю ее, а затем повторно использую для каждого экземпляра.

Вы пытались отключить клиентскую культуру? Вы можете найти его в разделе web.config, system.web.

<globalization enableClientBasedCulture="false"  />
Другие вопросы по тегам