gpt4 book ai didi

c# - RemoteAttribute Validation 传递了错误的 AdditionalFields 值

转载 作者:太空宇宙 更新时间:2023-11-03 10:53:19 24 4
gpt4 key购买 nike

我正在使用 RemoteAttribute 在我的表单中进行一些自定义验证。为简单起见,我有一个单选组 PrimarySupportingDocument,有 3 个选项。如果是某个选择,远程验证应该验证两个文本框值,VINTitleNumber,是否基于某些(不相关的)标准匹配。

在我的 ViewModel 中:

    [Required]
[DisplayName("VIN")]
public string VIN { get; set; }

[Required]
[DisplayName("Primary Supporting Document")]
public string PrimarySupportingDocument { get; set; }

[DisplayName("Title Number")]
[Remote("VinAndTitleMatch", "Validation", ErrorMessage = "VIN and Title Number do not match", AdditionalFields = "VIN, PrimarySupportingDocument")]
public string TitleNumber { get; set; }

在我的 ValidationController 中:

    public JsonResult VinAndTitleMatch(string titleNumber, string VIN, string primarySupportingDocument)
{
if (primarySupportingDocument == "In-State Title" && VIN != null && titleNumber != null)
{


if (/* test if vin and title number match */)
{
return Json(true, JsonRequestBehavior.AllowGet);
}

return Json("VIN and Title Number do not match", JsonRequestBehavior.AllowGet);
}

return Json(true, JsonRequestBehavior.AllowGet);
}

表单示例: example of problem

因此,如果您查看请求 URL,您会发现它正在将 In-State+Title 作为 PrimarySupportingDocument 值传递,而不是实际的 :检查州外标题

我做了一些研究,看看从 jquery.validate 传递的实际值是否正确,并找到了 this issue .这不是问题,因为它已在 1.11.1 中修复并且我记录了该行返回值的输出:$("input[name='"+ $(element).attr("name") + "']:checked").val() 返回正确的值,但是,我可以' 似乎弄清楚为什么它没有通过 radio 组的检查值。

这是 radio 组的渲染输出:

<div class="form-group">
<label class="control-label" for="PrimarySupportingDocument">Primary Supporting Document</label>
<div class="radio">
<label>
<input data-val="true" data-val-required="The Primary Supporting Document field is required." id="PrimarySupportingDocument0" name="PrimarySupportingDocument" type="radio" value="In-State Title">In-State Title</label>
</div>
<div class="radio">
<label>
<input id="PrimarySupportingDocument1" name="PrimarySupportingDocument" type="radio" value="Out of State Title">Out of State Title</label>
</div>
<div class="radio">
<label>
<input id="PrimarySupportingDocument2" name="PrimarySupportingDocument" type="radio" value="None">None</label>
</div>
<span class="field-validation-valid" data-valmsg-for="PrimarySupportingDocument" data-valmsg-replace="true"></span>
</div>

最佳答案

不幸的是,jquery.validate.unobtrusive.js 不支持单选按钮!它不通过 checked 属性过滤

adapters.add("remote", ["url", "type", "additionalfields"], function (options) {
...
$.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").filter("[name='" + escapeAttributeValue(paramName) + "']").val(); //problem here
};
});
...
});

最简单的方法是使用 select 元素而不是单选按钮

关于c# - RemoteAttribute Validation 传递了错误的 AdditionalFields 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20482095/

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