2011-01-13 67 views
8

我有一个视图,我让输入字段在我的SQL Server 2008 R2数据库设置为浮动,我使用实体Framwork 4.为什么ASP.NET MVC 3不能正确验证我的浮动?

在实体框架模型中场看起来像这样private Nullable<global::System.Double> _TestNumber;

和视图使用一个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

这应该工作:

视图模型:

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

一件事beh你观察的行为是客户端文化和服务器端文化之间的不一致。因此,例如,如果已经启用了客户端验证,但客户端用文化作为,小数点分隔然后13.51将失败客户端验证,如果服务器使用文化作为.小数点分隔然后13,51会失败服务器端验证。因此,无论13.5113,51都无法验证,但在不同的层。为了使服务器使用相同的文化作为客户端,你可以设置你的web.config中的文化auto如下:

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

我添加了全球化``但只要我提交它表示“数值'10.50'对于`无效'。我如何确保它现在真的是同一种文化? – 2011-01-13 15:15:29

相关问题