2015-08-17 60 views
0

我有几个远程验证用于客户端验证。其中两个几乎完全相同,但一个有效,另一个没有,断点不会受到影响。MVC远程验证不起作用

工作一:

查看:

@Html.EditorFor(model => model.ClassNumber, new { @id = "ClassNumber" }) 
@Html.ValidationMessageFor(model => model.ClassNumber) 

型号:

[EdmScalarPropertyAttribute(EntityKeyProperty = false, IsNullable = false)] 
[Required(ErrorMessage = "Required")] 
[Remote("CheckClassNumber", "Course", AdditionalFields = "Title", HttpMethod = "POST", 
    ErrorMessage = "Already Exists")] 
[DataMemberAttribute()] 
public global::System.Int32 ClassNumber 
{ 

方法:

[HttpPost] 
public JsonResult CheckClassNumber(int ClassNumber, int Title) 
{ 
    var course = db.Courses.Any(c => c.ClassNumber.Equals(ClassNumber) && c.Title.Equals(Title)); 

    return Json(!course); 
} 

源代码:

<select class="chzn-select" data-placeholder=" -- Select Course -- " data-val="true" data-val-number="The field Title must be a number." data-val-required="Required" id="Title" name="Title"> 
     <option value=""></option> 
     <option value="1">Option 1</option> 
     <option value="2">Option 2</option> 
     <option value="3">Option 3</option> 
    </select> 
    <span class="field-validation-valid" data-valmsg-for="Title" data-valmsg-replace="true"></span> 

不工作的一个

查看:

@Html.DropDownListFor(model => model.Student, 
    @ViewBag.StudentID as SelectList, "", 
    new { @class = "chzn-select", data_placeholder = " -- Select Student -- " }) 
@Html.ValidationMessageFor(model => model.Student) 

型号:

[EdmScalarPropertyAttribute(EntityKeyProperty = false, IsNullable = false)] 
[Required(ErrorMessage = "Required")] 
[Remote("CheckIfEnrolled", "Enrollment", AdditionalFields = "Course", HttpMethod = "POST", 
    ErrorMessage = "Already Enrolled")] 
[DataMemberAttribute()] 
public global::System.Int32 Student 
{ 

方法:

[HttpPost] 
public JsonResult CheckIfEnrolled(int Student, int Course) 
{ 
    var exists = db.Enrollments.Any(e => e.Course.Equals(Course) && e.Student.Equals(Student)); 

    return Json(!exists); 
} 

源代码:

<select class="chzn-select" data-placeholder=" -- Select Student -- " data-val="true" data-val-number="The field Student must be a number." data-val-remote="Already Enrolled" data-val-remote-additionalfields="*.Student,*.Course" data-val-remote-url="/QIEducation/Enrollment/CheckIfEnrolled" data-val-required="Required" id="Student" name="Student"> 
    <option value=""></option> 
    <option value="8">Option 1</option> 
    <option value="10">Option 2</option> 
    <option value="11">Option 3</option> 
</select> 
<span class="field-validation-valid" data-valmsg-for="Student" data-valmsg-replace="true"></span> 

我已经确定了脚本以正确的顺序加载。其他字段输入正确。在调试或查看源代码时不会出现任何错误。我环顾四周,解决类似问题的解决方案已经实施。

回答

0

好的。原来,所选择的插件将选择元素转换为隐藏元素。这意味着验证不会默认检查它。我发现了一些适用于其他人的解决方案,但不适合我。我最终强迫对变更进行验证。

<script type="text/javascript"> 
    //Have to force a validation on change. 
    $('#Student').on('change', function() { 
     $('#Student').valid(); 
    }); 
</script> 

每次工作,并不会更改jquery文件中的默认值。

+0

您可以添加'$ .validator.setDefaults({ignore:[]});'这样jquery验证包含隐藏字段 –