Jquery验证不验证下拉列表



我有四个下拉列表在我的。net 5 core mvc视图。其中一个是从运行时传递给视图的模型中包含的列表中填充的,其他三个是通过Json调用填充的。这四个ddl在我的表单上都是必需的,但是Jquery Validate只捕获了其中的两个,我不知道为什么。

四个ddl的基本代码如下所示。首先,按预期验证失败的两个:

@* This DDL is populated from a list in the model *@    
<select id="mGroup" required>
<option selected="selected" value="">Select Material Group</option>
@foreach (var item in Model.groups)
{
<option value="@item.group" style="background-color: @item.hex_color;">
@item.name
</option>
}
</select>
@* This DDL is populated from a Json call, triggered when a value is selected in the first DDL *@
<select id="mSubGroup" tabindex="7" required>
<option value="">Select Material Group</option>
</select>

当我试图提交我的表单时,没有在这些ddl中选择有效的选项,验证触发器和它们被分配类'input-validation-error',这就是我想要的。

但是,下面的两个ddl都是由Json调用填充的,因此没有看到这种情况发生。

<select id="class" required>
<option value="" selected="selected">Select Class</option>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>
<select id="limit" required>
<option value="" selected="selected">Select Limit</option>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
</select>

当我尝试提交表单而不选择这些ddl上的选项时,什么也没有发生。它们的HTML保持不变。即使我尝试在前面提到的两个ddl中选择有效的选项,它们仍然没有得到验证。

包含这些ddl(以及所有其他输入)的表单在代码中设置为:

@using (Html.BeginForm(FormMethod.Post, new {id = "qForm"}))

…因为表单包含多个"提交"。每个按钮触发不同的表单操作。在我的javascript中,这些按钮的点击事件,我调用

$('#rfqForm').validate();

根据Jquery Validate文档

我的表单还受到模型中的MVC服务器端验证的约束。这四个下拉菜单各自将所选值提供给Html.HiddenFor"连接到回发模型的对象,我知道它们不包括在DOM验证中。但是,当我将这些隐藏字段替换为其他东西时,例如用CSS隐藏的文本框,仍然不会触发验证。这就是为什么我尝试走Jquery路线。

我需要让这些下拉框验证。我希望有人能解释一下这里出了什么问题。

结果证明,将这些下拉框中的选定值复制到用CSS隐藏的文本框中,而不是隐藏字段,然后运行这些验证是可行的方法。问题是,我需要用"visibility: hidden"来隐藏它们,而不是用"display: none"来隐藏它们,这是我之前尝试过的。

最新更新