2011-01-13 17 views
8

Ho una vista in cui mi permetto di ingresso, i campi sono impostati come float nel mio database SQL Server 2008 R2 e sto usando Entity Framwork 4.Perché ASP.NET MVC 3 non convalida correttamente i miei float?

nell'entità modello Framework campo assomiglia a questo private Nullable<global::System.Double> _TestNumber;

e la vista utilizza un EditorField per consentire l'input in questo modo:

<div class="editor-field"> 
    @Html.EditorFor(model => model.TestNumber) 
    @Html.ValidationMessageFor(model => model.TestNumber) 
</div> 

sono comunque questo errore nella convalida del messaggio: The value '13.51' is not valid for TestNumber. ho provato con una virgola al posto del periodo, la stessa cosa.

Suggerimenti?

risposta

2

Che dovrebbe funzionare:

Vista Modello:

public class MyViewModel 
{ 
    public double? TestNumber { get; set; } 
} 

Controller:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new MyViewModel { TestNumber = 13.51 }); 
    } 

    [HttpPost] 
    public ActionResult Index(MyViewModel model) 
    { 
     return View(model); 
    } 
} 

Vista:

@model AppName.Models.MyViewModel 
@{ 
    ViewBag.Title = "Home Page"; 
} 
@using (Html.BeginForm()) 
{ 
    @Html.EditorFor(x => x.TestNumber) 
    @Html.ValidationMessageFor(x => x.TestNumber) 
    <input type="submit" value="OK" /> 
} 

Una cosa che si potrebbe checkout e che potrebbe spiegare il beh che stai osservando è incoerenza tra cultura lato cliente e cultura lato server. Ad esempio, se è stata abilitata la convalida lato client ma la cultura client utilizza , come separatore decimale, allora 13.51 avrà esito negativo la convalida lato client e se la coltura server utilizza . come separatore decimale, quindi 13,51 non supererà la convalida lato server. Quindi, sia 13.51 e 13,51 non riescono a convalidare, ma su diversi livelli. Affinché il server per utilizzare la stessa cultura come il client è possibile impostare le seguenti la cultura auto nel web.config:

<globalization 
    requestEncoding="utf-8" 
    responseEncoding="utf-8" 
    culture="auto" 
    uiCulture="auto" 
/> 
+1

Ho aggiunto che la globalizzazione in '' ma non appena mi presento il modulo dice 'Il valore '10 .50 'non è valido per'. Come faccio a garantire che sia davvero la stessa cultura ora? –

+0

@Filip Ekberg, che dire '10,50'? –

+0

Funziona quando imposto ClientValidationEnabled su falso '' ma non quando è impostato su true. –

Problemi correlati