为什么ASP.NET MVC 3没有正确验证我的浮动?

Fil*_*erg 8 asp.net asp.net-mvc asp.net-mvc-3

我有一个允许输入的视图,在我的SQL Server 2008 R2数据库中将字段设置为float,我正在使用Entity Framwork 4.

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

View使用EditorField来允许这样的输入:

<div class="editor-field">
    @Html.EditorFor(model => model.TestNumber)
    @Html.ValidationMessageFor(model => model.TestNumber)
</div>
Run Code Online (Sandbox Code Playgroud)

然而,我在验证消息中收到此错误:The value '13.51' is not valid for TestNumber.我尝试使用逗号代替句点,同样的事情.

建议?

Dar*_*rov 2

那应该有效:

查看型号:

public class MyViewModel
{
    public double? TestNumber { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

控制器:

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

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        return View(model);
    }
}
Run Code Online (Sandbox Code Playgroud)

看法:

@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" />
}
Run Code Online (Sandbox Code Playgroud)

您可以检查并可以解释您所观察到的行为的一件事是客户端文化和服务器端文化之间的不一致。因此,例如,如果您启用了客户端验证,但客户端区域性用作,小数分隔符,则13.51客户端验证将失败;如果服务器区域性用作.小数分隔符,则13,51服务器端验证将失败。因此 和13.5113,51无法验证,但在不同的层上。为了使服务器使用与客户端相同的区域性,您可以auto在 web.config 中设置以下区域性:

<globalization 
    requestEncoding="utf-8" 
    responseEncoding="utf-8" 
    culture="auto" 
    uiCulture="auto"
/>
Run Code Online (Sandbox Code Playgroud)