如果不在客户端验证工作,则必需

时间:2016-09-02 06:06:56

标签: asp.net-mvc kendo-ui unobtrusive-validation client-side-validation

在我的asp.net mvc app中的模型中,我使用了RequiredIf属性。

模型

[RequiredIf("CustomerType== 'B'", ErrorMessage = "Please enter customer name")]
[Display(Name = "Customer Name")]
[DataMember(Name = "CustomerName")]
public String CustomerName{ get; set; }

[Required(ErrorMessage = "Please select customer type")]
[Display(Name = "Customer Type")]
[DataMember(Name = "CustomerType")]
public String CustomerType { get; set; }

查看

 @using (Html.BeginForm(null,null,FormMethod.Post,new { @class ="transactionForm" })){

 <td>@Html.LabelFor(model => model.CustomerName, htmlAttributes: new { @class = "control-label col-md-2" })</td>
 <td>@(Html.Kendo().TextBox()
       .Name("MusteriAd")
       .HtmlAttributes(new { style = "width: 250px; height: 32px;" }))
     @Html.ValidationMessageFor(model => model.CustomerName, "", new { @class = "text-danger" })
 </td>

我通过ajax帖子将表单发送到服务器,这是我的功能;

function SaveRecord(action, controller, param) {

$('.error').remove(); 

var form = $(".transactionForm");

var validator = form.kendoValidator().data("kendoValidator");

if (validator.validate()) {

    var data = form.serialize();

    $.ajax({
        url: '/' + controller + '/' + action,
        dataType: 'json',
        type: 'POST',
        data: data,
        success: function (response) {
            if (response !== null && !response.success) {

                DisplayErrors(response.error);

            }
            else {

            }

        },
        error: function (xhr, ajaxOptions, thrownError) {
        }
    });
}
}

使用这种结构,我可以完美地处理服务器端验证,但是在客户端 - validator.validate()部分,它只验证具有必需属性的输入。

我应该为客户端验证这些requiredif输入编写额外的代码,还是有其他方法可以在razor侧或js端处理这个问题?

1 个答案:

答案 0 :(得分:0)

我认为将此留给kendo-ui无法解决这个问题。因为, kendo为客户类型输入生成html;

<input data-val="true" data-val-required="Please enter customer name"    id="CustomerType" name="CustomerType" style="width: 250px; display: none;" type="text" data-role="dropdownlist" class="k-valid">

客户名称

<input class="k-textbox k-valid" id="CustomerName" name="CustomerName" style="width: 250px; height: 32px;">

data-val-required不会为剑道的 requiredIf 归因成员生成。

所以,我只在服务器端检查这些字段。