没有Required属性的整数属性仍然是必需的
本文关键字:属性 仍然是 整数 没有 Required | 更新日期: 2023-09-27 18:16:39
我没有对整数属性应用任何[Required]属性验证。但是每次我发布表单时,它都会触发验证。最初它在客户端使用HTML 5数据属性。我在Web.config中设置了ClientValidationEnabled为false。之后,它将触发Required属性验证。我创建了一个新项目,但情况相同。尝试将。net框架从4.6更改为4.5,但没有成功。也尝试了VS2015和vs2013客户端剃刀代码
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.LabelFor(model => model.Weight)
@Html.TextBoxFor(model => model.Weight, new { @class = "form-control", @placeholder = "Weight", Value = "" })
@Html.ValidationMessageFor(model => model.Weight, "", new { @class = "text-danger" })
<input type="submit" class="btn btn-default" value="Save" />
}
模型:
public class RegistrationModel
{
public int Weight { get; set; }
}
动作方法
public ActionResult Index()
{
var model = new RegistrationModel();
return View(model);
}
[HttpPost]
public ActionResult Index(RegistrationModel model)
{
if (ModelState.IsValid)
{
}
return View();
}
谢谢
您的模型属性是type_ int
。一个int
必须始终有一个值(它不是空的),所以不管禁用客户端验证,只要你击中控制器,ModelState
将是无效的,如果你提交Weight
的null
(空字符串)值。
如果你想允许为空,那么你必须使属性为空
public int? Weight { get; set; }
旁注:当你使用html helper绑定到你的模型属性时,你不应该尝试设置value
属性。
这是整型属性的默认行为,因为int必须这样做有一个甚至为零的值。所以你必须让它的类型为可空的int
这可能对你有帮助,
<form method="post" action="/foo" novalidate>...</form>
或
<form>
<input type="email"/> <!-- Will be validated -->
<input type="string" formnovalidate/> <!-- Will not be validated -->
</form>