Asp.net mvc 带有附加布尔字段的MVC远程验证
我正在尝试将远程验证与其他bool复选框字段一起使用Asp.net mvc 带有附加布尔字段的MVC远程验证,asp.net-mvc,asp.net-mvc-5,unobtrusive-validation,asp.net-mvc-5.2,Asp.net Mvc,Asp.net Mvc 5,Unobtrusive Validation,Asp.net Mvc 5.2,我正在尝试将远程验证与其他bool复选框字段一起使用 [Remote("IsStorageConnectionValid", "TenantManagement", AdditionalFields = "CreateStorage")] public String StorageConnectionString { get; set; } 验证码 public JsonResult IsStorageConnectionValid(string storageConnectionString
[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一起使用时,这似乎是一个bug。问题是,CheckBoxFor呈现2个元素,一个值为true的复选框和一个值为false的隐藏输入未选中复选框不会回发,因此第二个隐藏输入确保回发一个值供DefaultModelBinder使用 查看jquery.validate.unobtrusive.js文件的相关部分 return语句返回您的case.find':input[name=CreateStorage]'.val;返回第一个输入的值,其名称为=CreateStorage,该值将始终为true复选框的值 作为测试,如果使用HiddenFor而不是CheckBoxFor呈现值,您将在IsStorage ConnectionValid方法中收到正确的值,但这当然会有所帮助,因为您无法更改该值 不确定最佳解决方案,但不引人注目的脚本应该首先检查if.find。。返回多个元素,如果第一个元素是未选中的复选框,则返回第二个元素的值 编辑 我已将此报告为 编辑2
我已被告知,该问题现在已被解决。当与@Html.CheckBoxFor一起使用时,这似乎是一个bug。问题是,CheckBoxFor呈现2个元素,一个值为true的复选框和一个值为false的隐藏输入未选中复选框不会回发,因此第二个隐藏输入确保回发一个值供DefaultModelBinder使用 查看jquery.validate.unobtrusive.js文件的相关部分 return语句返回您的case.find':input[name=CreateStorage]'.val;返回第一个输入的值,其名称为=CreateStorage,该值将始终为true复选框的值 作为测试,如果使用HiddenFor而不是CheckBoxFor呈现值,您将在IsStorage ConnectionValid方法中收到正确的值,但这当然会有所帮助,因为您无法更改该值 不确定最佳解决方案,但不引人注目的脚本应该首先检查if.find。。返回多个元素,如果第一个元素是未选中的复选框,则返回第二个元素的值 编辑 我已将此报告为 编辑2
有人告诉我,这个问题现在已经解决了,这可能有助于我们像浏览器看到的那样看到代码。换句话说,请发布一个呈现HTML标记和JavaScript的简明示例。它做同样的事情,这可能有助于我们看到浏览器看到的代码。换句话说,请发布一个呈现HTML标记和JavaScript的简明示例。它做同样的事情
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);
});