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

前端之家收集整理的这篇文章主要介绍了为什么ASP.NET MVC 3没有正确验证我的浮动?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个允许输入的视图,我的sql Server 2008 R2数据库中的字段设置为float,我正在使用Entity Framwork 4.

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

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

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

但是我在验证消息中收到此错误:值’13 .51’对TestNumber无效.我试过逗号而不是句号,同样的事情.

建议?

解决方法

这应该工作:

查看型号:

  1. public class Myviewmodel
  2. {
  3. public double? TestNumber { get; set; }
  4. }

控制器:

  1. public class HomeController : Controller
  2. {
  3. public ActionResult Index()
  4. {
  5. return View(new Myviewmodel { TestNumber = 13.51 });
  6. }
  7.  
  8. [HttpPost]
  9. public ActionResult Index(Myviewmodel model)
  10. {
  11. return View(model);
  12. }
  13. }

视图:

  1. @model AppName.Models.Myviewmodel
  2. @{
  3. ViewBag.Title = "Home Page";
  4. }
  5. @using (Html.BeginForm())
  6. {
  7. @Html.EditorFor(x => x.TestNumber)
  8. @Html.ValidationMessageFor(x => x.TestNumber)
  9. <input type="submit" value="OK" />
  10. }

您可以签出并且可以解释您正在观察的行为的一件事是客户端文化和服务器端文化之间的不一致.因此,例如,如果您已启用客户端验证但客户端文化使用,作为小数分隔符,则13.51将无法通过客户端验证,如果服务器区域使用.作为小数分隔符,然后13,51将无法通过服务器端验证.所以13.51和13,51都无法验证,但在不同的层上.为了使服务器使用与客户端相同的文化,您可以在web.config中将以下文化设置为auto:

  1. <globalization
  2. requestEncoding="utf-8"
  3. responseEncoding="utf-8"
  4. culture="auto"
  5. uiCulture="auto"
  6. />

猜你在找的asp.Net相关文章