Pregunta

Tengo una aplicación Asp.net MVC con una visión particular que tiene un modelo con una propiedad float.

Mi entorno local del servidor dice que , es símbolo decimal y funciona bien cuando edito mi modelo y entro por ejemplo 7,5 en el cuadro de texto y que lo ponga al servidor. aglutinante de modelo por defecto es capaz de unirse a este valor como se esperaba a siete y medio .

Pero cuando Muestra este mismo valor usando <%= this.Model.FloatValue %>, símbolo decimal se convierte en . lo que significa que <%= %> obviamente ignora la configuración regional del servidor.

Así. ¿Cómo puedo solucionar este problema, entonces? Qué entorno local se debe utilizar? regional del sistema del servidor que dice que el símbolo decimal es , navegador o configuración local que se establece en en-gb, lo que significa que es . símbolo decimal.

De todos modos. Sólo quiero que esto funcione de forma fiable.

Algunos código:

Mis acciones del controlador:

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);
}

El segundo se llama de forma asincrónica utilizando $.ajax().

parte pertinente del vista parcial:

<%@ 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>
...

Cualquier modelo de mi clase:

/// <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; }
}

Como se puede ver, no hay nada inusual aquí. Ah, y por cierto:. Validación de rango de FloatValue no funciona bien

¿Fue útil?

Solución 2

Uso CultureInfo personalizada al convertir a cadena

Al final utiliza el método de ToString() y proporcionar información de cultivo apropiado. Tenía que dar un poco más de código, pero funciona como se espera:

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

Y cuando necesito usar esta información la cultura varias veces en el mismo punto de vista que simplemente crear una variable de vista y lo almacenan y luego volver a utilizarlo con todos los casos.

Otros consejos

¿Usted intentó deshabilitar Cultura basados ??en el cliente? Puede encontrarlo en web.config, la sección system.web.

<globalization enableClientBasedCulture="false"  />
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top