2011-01-13 4 views
8

У меня есть вид, где я позволил вход, поля устанавливаются как поплавок в моем SQL Server 2008 R2 базы данных, и я использую Entity Framwork 4.Почему ASP.NET MVC 3 не проверяет мои поплавки правильно?

В рамках модели Entity поле выглядит следующим образом private Nullable<global::System.Double> _TestNumber;

И View использует EditorField, чтобы позволить вводить так:

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

однако я получаю эту ошибку в Оценочном сообщении: The value '13.51' is not valid for TestNumber. Я попытался с запятой вместо периода, то же самое.

Предложения?

ответ

2

Это должно работать:

View Model:

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

Контроллер:

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

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

Вид:

@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" /> 
} 

Одна вещь, которую вы могли бы оформить и которые могли бы объяснить поведение avior, который вы наблюдаете, - это несогласованность между культурой клиентской стороны и культурой на стороне сервера. Например, если вы включили проверку на стороне клиента, но культура клиента использует , как десятичный разделитель, тогда 13.51 не будет проверять на стороне клиента, и если культура сервера использует . как десятичный разделитель, тогда 13,51 не будет проверять серверную сторону. Таким образом, оба значения 13.51 и 13,51 не проверяются, а на разных уровнях. Для того, чтобы сервер, чтобы использовать ту же культуру, как клиент, вы можете установить следующие культуры в auto в вашем web.config:

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

Я добавил, что глобализация в '' , но как только я представляю в форме, которую он говорит: Значение '10 .50 'недопустимо для'. Как я могу убедиться, что на самом деле это настоящая культура? –

+0

@Filip Ekberg, а как насчет '10,50'? –

+0

Это работает, когда я устанавливаю ClientValidationEnabled в false '', но не тогда, когда для него установлено значение true. –