首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MVC3:是否通过jQuery验证使复选框成为必需的?

MVC3:是否通过jQuery验证使复选框成为必需的?
EN

Stack Overflow用户
提问于 2011-02-08 22:07:31
回答 3查看 28.9K关注 0票数 45

我希望我的“同意条款”复选框在MVC3项目中使用jQuery验证是强制性的。我目前从"MS data annotation attributes“+ "MS MVC3 unobtrusive jQuery validation”得到服务器/客户端DRY/SPOT验证。

下面是一个独立的测试(由MVC3生成的普通HTML语言)。为什么它不起作用呢?运行时,验证确保“联系人姓名”字段已填充,但不关心复选框的状态。

代码语言:javascript
运行
复制
<!DOCTYPE html>

<html>
<head>
    <title>RequiredCheckbox</title>

    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
    <script type="text/javascript" src="//ajax.microsoft.com/ajax/jQuery.Validate/1.7/jQuery.Validate.js"></script>
    <script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.js"></script>
    <script type="text/javascript" language="javascript">
        $(function () {
            // http://itmeze.com/2010/12/checkbox-has-to-be-checked-with-unobtrusive-jquery-validation-and-asp-net-mvc-3/
            $.validator.unobtrusive.adapters.add("mandatory", function (options) {
                    options.rules["required"] = true;
                    if (options.message) {
                        options.messages["required"] = options.message;
                    }
                }
            });
            $.validator.unobtrusive.parse(document);
        });
    </script>

</head>

<body>
    <div>
        <form>
            <input data-val="true" data-val-mandatory="The field Terms Are Accepted is invalid." id="isTermsAccepted" name="isTermsAccepted" type="checkbox" value="true" />
            <input name="isTermsAccepted" type="hidden" value="false" />
            <span class="field-validation-valid" data-valmsg-for="isTermsAccepted" data-valmsg-replace="true"></span>

            <input data-val="true" data-val-required="The Contact Name field is required." id="contactName" name="contactName" type="text" value="" />
            <span class="field-validation-valid" data-valmsg-for="contactName" data-valmsg-replace="true"></span>
            <button type="submit">Submit</button>
        </form>
    </div>
</body>
</html>

这篇文章的其余部分只是我的研究笔记。

设置数据注释属性required无济于事:

http://forums.89.biz/forums/MVC+3+Unobtrusive+validation+does+not+work+with+checkboxes+(jquery+validation)+and+the+fix+for+it

这很好。checkbox的"required“意味着什么显然是一场我不想涉足的圣战,微软认为他们比jquery团队更了解这一点。在本地强制它应该是一个简单的问题:

$("form").validate({ rules: { cbAgreeToTerms: "required" } });

...right?不是,因为:

http://blog.waynebrantley.com/2011/01/mvc3-breaks-any-manual-use-of-jquery.html

http://pinoytech.org/question/4824071/microsofts-jquery-validate-unobtrusive-makes-other-validators-skip-validation

什么?这真是太厚颜无耻了!(当然是IMHO。)

现在,我尝试了这个解决方案:

http://itmeze.com/2010/12/checkbox-has-to-be-checked-with-unobtrusive-jquery-validation-and-asp-net-mvc-3/

但这对我不起作用。这位作者的悬而未决的评论和在他/她的文章中使用的倒置复选框测试有点像货物狂热,这让我想知道它是否真的对他/她有效,那么还涉及到什么巫毒呢?

注意:我认为JS的最后一个片段相当于cleaner:

上一篇文章中建议的$.validator.unobtrusive.adapters.addBool("brequired", "required");

http://forums.asp.net/p/1648319/4281140.aspx#4281140

但请注意,作者评论说他还没有调试它。这对我不起作用,从字里行间看,我想他的意思是对他不起作用?

unobtrusive.js调用在docready上解析,所以我尝试调用它,但它对我没有帮助。

$.validator.unobtrusive.parse(document);我也找到了一些类似的文章,没有一篇谈到需要任何形式的初始化。也许他们都在本地编辑原始/公共unobtrusive.js?如果我能控制它,我宁愿不要,这不就是适配器的作用吗?

我发现堆栈溢出的文章,几乎相同,以及更复杂的例子:

ASP .Net MVC 3 unobtrusive custom client validation

Perform client side validation for custom attribute

http://xhalent.wordpress.com/2011/01/27/custom-unobstrusive-jquery-validation-in-asp-net-mvc-3/

但我没有看到任何与我已经尝试过的不同之处。

这真的对人们有效吗?为什么我不能让它为我工作?

EN

Stack Overflow用户

发布于 2011-02-18 20:16:59

代码语言:javascript
运行
复制
<asp:Content ID="Content1" ContentPlaceHolderID="MainContentPlaceHolder" runat="server">
    <h2>
        Save New Contact</h2>
    <%using (Html.BeginForm("SaveContact", "Contact", FormMethod.Post, new { id = "UserImportTypeForm", @autocomplete = "off" })) %>
    <%{ %>
    <table style="height: 100px;">
        <tr>
            <td>
                Import Type :
            </td>

        </tr>
        <tr>
            <td>
                Is Verified
            </td>
            <td>
                <%-- <%=Html.TextBox("UserContactModel.IsVerified", new SelectList(Model.IsVerified, "IsVerified"), new { })%>>--%>
                <%-- <input type="text" name="txtIsVerified" id="txtIsVerified" />--%>
                <%-- <%= Html.TextBox("txtIsVerified")%>--%>
                <%=Html.CheckBox("SelectedUserContact.IsVerified", Convert.ToBoolean(Model.SelectedUserContact.IsVerified) )%>
                <%=Html.ValidationSummary("txtIsVerified", "*")%>
            </td>
        </tr>
        <tr>
            <td>
                First Name
            </td>
            <td>
                <%--<input type="text" name="txtFirstName" id="txtFirstName" />--%>
                <%=Html.TextBox ("SelectedUserContact.FirstName", Model.SelectedUserContact.FirstName )%>
                <%-- <%=Html.ValidationSummary("FirstName", "*")%>--%>
            </td>
        </tr>
        <tr>
            <td>
                Last Name
            </td>
            <td>
                <%--<input type="text" name="txtLastName" id="txtLastName" />--%>
                <%=Html.TextBox("SelectedUserContact.LastName", Model.SelectedUserContact.LastName)%>
                <%=Html.ValidationSummary("LastName", "*")%>
            </td>
        </tr>
        <tr>
            <td>
                Contact ID
            </td>
            <td>
                <%=Html.TextBox("SelectedUserContact.ContactID",Model.SelectedUserContact.ContactID) %>
                <%=Html.ValidationSummary("ContactID","*") %>
            </td>
        </tr>
        <tr>
            <td align="right">
                <input type="submit" value="Save" name="btnSave" id="btnSave" />
            </td>
            <td>
                <input type="button" value="Cancel" name="btnCancel" id="btnCancel" />
            </td>
        </tr>
    </table>
    <%} %>
    <script src="../../Scripts/jquery.validate.js" type="text/javascript"></script>
    <script language="javascript" type="text/javascript">

        $("#UserImportTypeForm").validate({
            rules:
    {

        "SelectedUserContact.FirstName": { required: true },
        "SelectedUserContact.LastName": { required: true },
        "SelectedUserContact.ContactID": {required:true}
    },
            messages:
    {

        "SelectedUserContact.FirstName": { required: "*" },
        "SelectedUserContact.LastName": { required: "*" },
        "SelectedUserContact.ContactID": { required: "*" },

    }
        });



    </script>
</asp:Content>
票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4934032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档