无法使用jQuery Validate验证选择选择(不是不引人注目的)

时间:2015-01-27 08:18:10

标签: jquery asp.net-mvc-4 jquery-validate jquery-chosen

我试图在我的ASP.NET MVC 4应用程序中进行简单的DropDownList验证(清除jQuery - 没有不引人注目)。

我在模型中有字段:

[DisplayName("Wybierz płatnika")]
public virtual int? studyPayerId { get; set; }
public virtual IList<StudyPayer> PayersList { get; set; }

然后在控制器中我做:

var payers = RisDbPersistanceManager.RetrieveEquals<StudyPayer>("IsActive", true); 
if (payers != null)
{
  model.PayersList = payers;  // it is populated                 
}
model.studyPayerId = null;

在我的观点中:

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>

...

$('#studyPayerId').rules('add',
{
    required: true,
    messages: {
        required: "Proszę wybrać płatnika!"
    }
});    
...
<div class="formsElement" >
  <div class="formsElementLabel" >
    @Html.LabelFor(x => x.studyPayerId)
  </div>
  <div class="formsElementInput" >
    @Html.DropDownListFor(x => x.studyPayerId, new SelectList(Model.PayersList, "Id", "Name", Model.studyPayerId), "-- wybierz płatnika --")
    @Html.ValidationMessageFor(x => x.studyPayerId)
  </div>
</div>

在简单的TextBox字段中,一切正常 - 在“提交”按钮单击上验证我的字段。但是当我没有选择任何内容时,DropDownList不显示任何消息,并留下“ - wybierzpłatnika - ”选择。

修改

  <select id="Gender" class="error" name="Gender" style="display: none;">
  <label class="error" for="Gender">Proszę wybrać płeć!</label>
  <div id="Gender_chosen" class="chosen-container chosen-container-single chosen-container-single-nosearch" style="width: 127px;" title="">
    <a class="chosen-single" tabindex="-1">
    <span>-- nieokreślona --</span>
  <div>
  </a>
  <div class="chosen-drop" style="top: 34px; bottom: auto;">
</div>

1 个答案:

答案 0 :(得分:2)

  1. 这是JavaScript,因此您需要向我们展示浏览器看到的 RENDERED 和相关的HTML代码,而不是您的型号,视图或控制器。由于我无法看到您呈现的HTML,因此我在下面的演示代码中使用了通用命名。

    • 第一个option元素必须具有value=""属性。
    • select元素必须具有name属性,即使您不使用它也是如此。

  2. 我看不到您对.validate()方法的调用。插件 必须 首先使用.validate()方法进行初始化。没有它,你不能使用.rules()方法。

  3. <强>的jQuery

    $(document).ready(function () {
    
        $('#myform').validate(); // <- INITIALIZE plugin
    
        $('#studyPayerId').rules('add', {
            required: true,
            messages: {
                required: "Proszę wybrać płatnika!"
            }
        });
    
    });
    

    呈现HTML

    <form id="myform">
        <select name="myselect" id="studyPayerId">
            <option value="">-- wybierz płatnika --</option>
            <option value="1">option 1</option>
        </select>
        <br/>
        <input type="submit" />
    </form>
    

    工作演示:http://jsfiddle.net/nwLqdemu/


    我不明白你为什么要使用.rules()方法。通常仅在需要添加和删除规则时使用动态;或者当规则一次性应用于整个元素组时,因为它太长而不能包含在.validate()方法中。

    否则,您只需在初始化时在.validate()方法中声明规则......

    $(document).ready(function () {
    
        // INITIALIZE plugin
    
        $('#myform').validate({ 
            rules: {
                myselect: {  // <- NAME attribute
                    required: true
                }
            },
            messages: {
                myselect: {  // <- NAME attribute
                    required: "Proszę wybrać płatnika!"
                }
            }
        });
    
    });
    

    工作演示2:http://jsfiddle.net/nwLqdemu/1/


    <强> Please see the SO Tag Wiki page for a basic demo and hints on proper usage.


    修改

    由于您从未提及使用“选择”插件来创建下拉列表,因此没有人能够回答此问题。但是,由于jQuery Validate插件默认忽略隐藏元素,因此您需要将ignore选项更改为[]以“忽略任何内容”并验证选择隐藏的元素。