gpt4 book ai didi

c# - 通过 ASP.NET MVC 3 中的 BindAttribute 和 ModelValidator 排除的属性

转载 作者:行者123 更新时间:2023-11-30 15:46:12 27 4
gpt4 key购买 nike

晚上好

我在模型绑定(bind)和验证方面遇到问题,但我不知道这是否是正常行为:问题是,尽管 BindAttribute(正确填充了他的属性 Excluded),排除的属性已验证但未验证在 ModelState 字典中删除...所以我的观点出现错误...关于排除的属性!呸!

那么,有没有办法直接在我的模型验证器中获取“非排除属性”列表,这样我就可以告诉我的验证服务不要验证排除的属性?

这里是验证器提供者和验证器本身(只是伟大的 FluentValidator 的内部包装器)

internal sealed class ValidationProvider : ModelValidatorProvider {
private readonly IValidationFactory _validationFactory;

public ValidationProvider(IValidationFactory validationFactory) {
_validationFactory = validationFactory;
}

public override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context) {
if (metadata.ModelType != null) {
IValidationService validationService;
if (_validationFactory.TryCreateServiceFor(metadata.ModelType, out validationService)) {
yield return new ValidationAdapter(metadata, context, validationService);
}
}
}

private sealed class ValidationAdapter : ModelValidator {
private readonly IValidationService _validationService;

internal ValidationAdapter(ModelMetadata metadata,
ControllerContext controllerContext,
IValidationService validationService)
: base(metadata, controllerContext) {
_validationService = validationService;
}

public override IEnumerable<ModelValidationResult> Validate(object container) {
if (Metadata.Model != null) {
IEnumerable<ValidationFault> validationFaults;
if (!_validationService.TryValidate(Metadata.Model, out validationFaults)) {
return validationFaults.Select(fault => new ModelValidationResult {
MemberName = fault.PropertyInfo.Name,
Message = fault.FaultedRule.Message
});
}
}

return Enumerable.Empty<ModelValidationResult>();
}
}
}

这是 Action :

public class MyModel {
public string Test { get; set; }
public string Name { get; set; }
}

[HttpPost]
public ActionResult Test([Bind(Exclude = "Test")] MyModel model) {
if (ModelState.IsValid) {
...
}

return View();
}

在这里,我得到排除的“测试”属性的错误...哈!

谢谢!

最佳答案

这是预期的行为。此更改(始终进行整个模型验证)是在 MVC 2 发布周期的后期根据客户反馈(以及最小意外原则)做出的。

更多信息:

http://bradwilson.typepad.com/blog/2010/01/input-validation-vs-model-validation-in-aspnet-mvc.html

关于c# - 通过 ASP.NET MVC 3 中的 BindAttribute 和 ModelValidator 排除的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4480781/

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