gpt4 book ai didi

c# - 获取对象列表的 MVC 客户端验证的完整属性名称

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

我正在编写一个依赖于模型中另一个命名属性的自定义 MVC 验证属性。实现 IClientValidatable 我的代码如下所示:

public IEnumerable<ModelClientValidationRule> GetClientValidationRules
(ModelMetadata metadata, ControllerContext context)
{
var name = metadata.DisplayName ?? metadata.PropertyName;
ModelClientValidationRule rule = new ModelClientValidationRule()
{ ErrorMessage = FormatErrorMessage(name), ValidationType = "mycustomvalidation" };
rule.ValidationParameters.Add("dependentproperty", dependentProperty);

yield return rule;
}

问题是我试图在元素列表中使用它。依赖属性在 View 中呈现,名称为 MyListOfObjects[0].DependentProperty,验证规则呈现为 data-val-mycustomvalidation-dependentproperty="DependentProperty"

如何从 GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 中访问依赖属性的全名,以便它呈现为 data-val-mycustomvalidation-dependentproperty="MyListOfObjects[ 0].DependentProperty"

模型看起来像这样:

public class MyClass
{
public string SomeValue { get; set; }
public List<Item> MyListOfObjects { get; set; }

public class Item
{
[MyCustomValidation("DependentProperty")]
public int MyValidatedElement { get; set; }

public int DependentProperty { get; set; }

}
}

最佳答案

您不需要验证属性中的完全限定属性名称,并且在任何情况下都无法确定它,因为验证上下文(在您的情况下)是 typeof Item(该属性没有上下文父 MyClass 的)。

您确实需要全名的地方是在客户端脚本中(当您将 adapter 添加到 $.validator.unobtrusive 时。以下脚本将返回 id依赖属性的属性

myValidationNamespace = {
getDependantProperyID: function (validationElement, dependantProperty) {
if (document.getElementById(dependantProperty)) {
return dependantProperty;
}
var name = validationElement.name;
var index = name.lastIndexOf(".") + 1;
dependantProperty = (name.substr(0, index) + dependantProperty).replace(/[\.\[\]]/g, "_");
if (document.getElementById(dependantProperty)) {
return dependantProperty;
}
return null;
}
}

然后您可以在初始化客户端验证时使用它

$.validator.unobtrusive.adapters.add("mycustomvalidation", ["dependentproperty"], function (options) {
var element = options.element;
var dependentproperty = options.params.dependentproperty;
dependentproperty = myValidationNamespace.getDependantProperyID(element, dependentproperty);
options.rules['mycustomvalidation'] = {
dependentproperty: dependentproperty
};
options.messages['mycustomvalidation'] = options.message;
});

关于c# - 获取对象列表的 MVC 客户端验证的完整属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33525240/

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