使用Jquery单击按钮时的客户端数据注释验证

时间:2017-03-30 16:40:28

标签: c# jquery asp.net-mvc data-annotations

我有一个具有必需属性的模型。是否可以在不是提交类型的按钮单击上进行数据验证。我确实引用了this articlethis one,但它没有解决问题。

这是我的型号代码。

 [Required]
 [Display(Name = "Number of beds")]
 public int Beds { get; set; }
 [Required]
 [Display(Name = "Number of Inpatient Beds")]
 public int InpatientBeds { get; set; }

我的观点

@using (Html.BeginForm(new {id = "form1", @class = "form-horizontal" }))
{

<div class="divPanel">
    <div class="row">
        <div class="col-md-3">                
                @Html.LabelFor(m => m.Beds)
                @Html.TextBoxFor(m => m.Beds, new { @class = "form-control", @type = "number"})
                @Html.ValidationMessageFor(m => m.Beds)

        </div>
        <div class="col-md-3">

                @Html.LabelFor(m => m.InpatientBeds)
                @Html.TextBoxFor(m => m.InpatientBeds, new { @class = "form-control", @type = "number"})
                @Html.ValidationMessageFor(m => m.InpatientBeds)
        </div>
<div class="col-md-3">             
            <button type=button  class="btn btn-primary" id="btnCalculateScore" > Calculate Score</button>
        </div>
 </div>
<div class="col-md-3">           
        <button type="submit" class="btn btn-primary" id="btnSaveChanges" data-toggle="modal"><i class="fa fa-share-square-o"></i> Update Status</button>
    </div>
</div>
}

我的剧本

$('#btnCalculateScore').on('click', function (evt) {

evt.preventDefault();

if ($('#form1').valid()) {
    //Do Something.
}
}

验证不起作用,即使字段为空,控件也会进入if循环?有什么我想念的吗?此方法是否也会提供通常在提交按钮事件中发生的验证消息?

编辑:

  1. 我添加了一个类型为“提交”的正常“更新状态”按钮,验证工作正常。

  2. 我在表单中添加了id,以确保View包含其他表单无关紧要。

1 个答案:

答案 0 :(得分:1)

我有同样的问题,这似乎为我解决了。

@using (Html.BeginForm(new {id = "form1", @class = "form-horizontal" }))

在查看页面源代码时,此代码不会将id Form1附加到您的表单。因此,您的验证不会发生,因为找不到具有id form1的表单。

相反,假设您的操作是一个帖子而您正在保存数据,请参阅操作方法保存和控制器床,您可以将表单编辑为

@using (Html.BeginForm("Save", "Bed", FormMethod.Post, new { id = "form1",@class = "form-horizontal"}))

这会将id参数附加到您的表单(您可以使用ViewPageSource进行检查),它应该可以正常工作。可能有一个更好的解决方案,但这对我来说没有问题。