没有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();
        }

谢谢

没有Required属性的整数属性仍然是必需的

您的模型属性是type_ int。一个int必须始终有一个值(它不是空的),所以不管禁用客户端验证,只要你击中控制器,ModelState将是无效的,如果你提交Weightnull(空字符串)值。

如果你想允许为空,那么你必须使属性为空

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>