【问题标题】:Decimal validation in ViewView 中的十进制验证
【发布时间】:2013-10-09 21:54:24
【问题描述】:

我正在尝试从 MSDN 制作一个示例 MvcMusicStore 应用程序。我的模型类代码是:

    public class Album
    {
        public int Id { get; set; }

        public int GenreId { get; set; }
        public int ArtistId { get; set; }

        [Required(ErrorMessage = "An Album Title is required")]
        [StringLength(160)]
        public string Title { get; set; }

        [Required(ErrorMessage = "Price is required")]
        [Range(0.01, double.MaxValue, ErrorMessage = "Price must be positive")]
        public decimal Price { get; set; }

        [DisplayName("Album Art URL")]
        [StringLength(1024)]
        public string AlbumArtUrl { get; set; }


        public virtual Genre Genre { get; set; }
        public virtual Artist Artist { get; set; }
    }

我通过 Scaffolding(CRUD 模板)生成了 Controller 的代码。但是我在我的视图中验证价格时遇到了问题。这是我的 Razor 代码片段:

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

一切看起来都不错,客户端验证按预期工作,但问题在于服务器端验证。这是Controller中的方法代码:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(Album album)
    {
        if (ModelState.IsValid)
        {
            db.Albums.Add(album);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        ViewBag.GenreId = new SelectList(db.Genres, "Id", "Name", album.GenreId);
        ViewBag.ArtistId = new SelectList(db.Artists, "Id", "Name", album.ArtistId);
        return View(album);
    }

在这个方法的开头我插入了一个断点。调试器说album.Price 总是等于0。我想这是从文本框中的文本转换为控制器方法中的十进制问题。我总是插入点分隔的值,例如 10.99、12.65、19.99 等。它仅适用于整数值,例如 3、10、14 等。

如何解决?

【问题讨论】:

  • 您是否检查过这是否不是由您的系统文化引起的?如果您将文化设置为使用“,”而不是“。”分隔小数会导致这个问题。
  • 正如我所提到的,客户端验证按预期工作,所以我非常怀疑。但我会检查的。
  • 我查过了。我确实有逗号分隔的十进制表示法,但是在将分隔符更改为点之后,我的应用程序中没有任何改变。

标签: c# asp.net asp.net-mvc-4 razor


【解决方案1】:

您可以将区域性显式设置为小数点分隔符为 . 的区域性:

<globalization uiCulture="en-US" culture="en-US" />

【讨论】:

猜你喜欢
  • 2011-01-14
  • 1970-01-01
  • 2013-08-21
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 2015-06-26
相关资源
最近更新 更多