我的控制器看起来是这样的:ASP.NET MVC3双重验证(逗号,点,空)
public class PortefeuilleController : Controller
{
public ActionResult Create()
{
return View(new PortefeuilleViewModel{Saldo = 0.0});
}
}
我创建视图看起来是这样的:
@model PortefeuilleViewModel
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>PortefeuilleViewModel</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Naam)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Naam)
@Html.ValidationMessageFor(model => model.Naam)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Saldo)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Saldo)
@Html.ValidationMessageFor(model => model.Saldo)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
而且我PortefeuilleViewModel看起来是这样的:
public class PortefeuilleViewModel
{
[DisplayName("Naam")]
[Required(ErrorMessage = "Gelieve een naam in te voeren")]
public string Naam { get; set; }
[DisplayName("Saldo")]
public double Saldo { get; set; }
}
我的问题在于“Saldo”字段。我想验证它如下:
离开字段为空应该是有效的(因为我的代码隐藏将更改为“0.0”并将该值保存在数据库中)。但是,例如,'19,99'和'19.99'都应该被认为是有效的。其余的都是无效的。
我真的不知道该如何解决这个问题。我已经找到这篇文章:http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx 但这并没有解决(第二部分)我的问题...
任何帮助将不胜感激。谢谢。
好,谢谢你,那工作。但只是一个问题:为什么使用小数点以上的双倍? – Matthias
@Matthias,总是使用货币小数:http://stackoverflow.com/questions/1165761/decimal-vs-double-which-one-should-i-use-and-when除非你想开始放松货币: - )使用IEEE 754存储双精度,而小数则存储在10个基数中。 –
谢谢。在测试时,我只是意识到另外一件事情:如果用户输入字符串而不是数字,则不会发出警告。是否有像[Decimal(ErrorMessage =“Please give a decimal number”)]这样的注释可用于验证? – Matthias