与@Html.CheckBoxFor
. 问题是CheckBoxFor
渲染了 2 个元素,一个带有的复选框value="true"
和一个带有的隐藏输入value="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();
,它返回第一个输入的值,name="CreateStorage"
其中始终是true
(复选框的值)
作为测试,如果您使用HiddenFor
而不是渲染该值,CheckBoxFor
您将在您的方法中收到正确的值IsStorageConnectionValid
(但这当然会有所帮助,因为您无法更改该值)
不确定最佳解决方案,但unobtrusive
脚本应该首先检查是否.find(..)
返回多个元素,然后如果第一个是未选中的复选框,则返回第二个元素的值。
编辑
我已在 Codeplex 将此问题报告为问题
编辑 2
我已被告知该问题现已在此处解决