gpt4 book ai didi

jquery - MVC3 : make checkbox required via jQuery validate?

转载 作者:行者123 更新时间:2023-12-03 21:27:56 29 4
gpt4 key购买 nike

我希望在 MVC3 项目中使用 jQuery 验证强制使用“同意条款”复选框。我目前从“MS 数据注释属性”+“MS MVC3 不显眼的 jQuery 验证”获得服务器/客户端 DRY/SPOT 验证。

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

<!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>





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

设置数据注释属性[必需]没有帮助:
http://forums.89.biz/forums/MVC+3+Unobtrusive+validation+does+not+work+with+checkboxes+(jquery+validation)+and+the+fix+for+it .

没关系。对于复选框而言,“必需”的含义显然是一场我不想卷入的圣战,MS 认为他们比 jquery 团队更了解这一点。在本地强制它应该是一个简单的问题:
$("form").validate({ 规则: { cbAgreeToTerms: "required"} });

...对吗?不,因为:
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

什么?这实在是太臭了! (恕我直言,当然。)

现在,我尝试了这个解决方案:
http://itmeze.com/2010/12/checkbox-has-to-be-checked-with-unobtrusive-jquery-validation-and-asp-net-mvc-3/
这对我不起作用。这位作者的悬而未决的评论和对他/她文章前面的倒置 CHECKBOX 测试的有点 cargo 狂热的使用让我想知道它是否真的适用于他/她,那么还涉及其他什么巫术?

注意我认为JS的最后一个片段相当于清理器:
$.validator.unobtrusive.adapters.addBool("brequired", "required");这是由上一篇文章建议的:
http://forums.asp.net/p/1648319/4281140.aspx#4281140
但请注意,作者评论说他还没有调试它。这对我不起作用,从字里行间看,我想他的意思是这对他不起作用?

unobtrusive.js 在 docready 上调用 parse,所以我尝试调用它,但它对我没有帮助。
$.validator.unobtrusive.parse(文档);我还发现了一些类似的文章,但没有一篇讨论需要任何类型的初始化。也许他们都在本地编辑原始/公共(public) 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/
但我没有看到任何与我已经尝试过的不同的东西。

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

最佳答案

我在这里总结了正确工作的源代码,这些源代码是通过应用已接受的答案而产生的。希望您觉得它有用。

RequiredCheckbox.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<RegistrationViewModel>" %>

<!DOCTYPE html>
<html>
<head runat="server">
<title>RequiredCheckbox</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script>
<script src="//ajax.microsoft.com/ajax/jQuery.Validate/1.7/jQuery.Validate.js" type="text/javascript"></script>
<script src="//ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.js" type="text/javascript"></script>
<script type="text/javascript" language="javascript">
$.validator.unobtrusive.adapters.addBool("mandatory", "required");
</script>
</head>
<body>
<div>
<%
// These directives can occur in web.config instead
Html.EnableUnobtrusiveJavaScript();
Html.EnableClientValidation();
using (Html.BeginForm())
{ %>
<%: Html.CheckBoxFor(model => model.IsTermsAccepted)%>
<%: Html.ValidationMessageFor(model => model.IsTermsAccepted)%>

<%: Html.TextBoxFor(model => model.ContactName)%>
<%: Html.ValidationMessageFor(model => model.ContactName)%>
<button type="submit">Submit</button>
<% } %>
</div>
</body>
</html>

RegistrationViewModel.cs

using System;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

public class RegistrationViewModel {
[Mandatory (ErrorMessage="You must agree to the Terms to register.")]
[DisplayName("Terms Accepted")]
public bool isTermsAccepted { get; set; }

[Required]
[DisplayName("Contact Name")]
public string contactName { get; set; }
}

MandatoryAttribute.cs

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;

public class MandatoryAttribute : ValidationAttribute, IClientValidatable
{
public override bool IsValid(object value)
{
return (!(value is bool) || (bool)value);
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
ModelClientValidationRule rule = new ModelClientValidationRule();
rule.ErrorMessage = FormatErrorMessage(metadata.GetDisplayName());
rule.ValidationType = "mandatory";
yield return rule;
}
}

关于jquery - MVC3 : make checkbox required via jQuery validate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4934032/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com