我正在尝试使用远程验证和其他bool复选框字段
[Remote("IsstorageConnectionValid","TenantManagement",AdditionalFields = "CreateStorage")] public String StorageConnectionString { get; set; }
验证码
public JsonResult IsstorageConnectionValid(string storageConnectionString,bool createStorage){
它在击中验证器方面非常有效.但是,无论复选框的值如何,createStorage始终为true.如果我使用非复选框的其他字段,则可以完美地提供它们.
复选框作为标准创建:
@Html.CheckBoxFor(m => m.CreateStorage)
解决方法
与@ Html.CheckBoxFor一起使用时,这似乎是一个错误.问题是CheckBoxFor呈现2个元素,一个值为“true”的复选框和一个值为“false”的隐藏输入(未选中复选框不会回发,因此第二个隐藏输入确保将值回发以供DefaultModelBinder使用)
查看jquery.validate.unobtrusive.js文件的相关部分
adapters.add("remote",["url","type","additionalfields"],function (options) { var value = { url: options.params.url,type: options.params.type || "GET",data: {} },prefix = getModelPrefix(options.element.name); $.each(splitAndTrim(options.params.additionalfields || options.element.name),function (i,fieldName) { var paramName = appendModelPrefix(fieldName,prefix); value.data[paramName] = function () { return $(options.form).find(":input[name='" + escapeAttributeValue(paramName) + "']").val(); }; }); setValidationValues(options,"remote",value); });
return语句返回(在你的例子中).find(‘:input [name =“CreateStorage”]’).val();返回名称=“CreateStorage”的第一个输入的值,该值始终为true(复选框的值)
作为测试,如果使用HiddenFor渲染值而不是CheckBoxFor,您将在IsstorageConnectionValid方法中收到正确的值(但当然这会有所帮助,因为您无法更改值)
不确定最佳解决方案,但不显眼的脚本应该首先检查.find(..)是否返回多个元素,然后如果第一个是未选中的复选框,则返回第二个元素的值.
编辑
我已将此报告为issue at Codeplex
编辑2
我被告知这个问题现在已经是fixed here了
原文地址:https://www.jb51.cc/aspnet/249158.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。