Asp.Net MVC验证 – 依赖字段

前端之家收集整理的这篇文章主要介绍了Asp.Net MVC验证 – 依赖字段前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在尝试通过MVC验证,并且遇到了一些需要字段的问题,具体取决于另一个字段的值.下面是一个例子(我还没想到) – 如果PaymentMethod ==“Check”,则需要ChequeName,否则可以通过.
[required(ErrorMessage = "Payment Method must be selected")]
public override string PaymentMethod
{ get; set; }

[required(ErrorMessage = "ChequeName is required")]
public override string ChequeName
{ get; set; }

我正在为[required]使用System.ComponentModel.DataAnnotations,并且还扩展了ValidationAttribute以尝试使其工作,但我无法通过变量来进行验证(下面的扩展名)

public class JEPaymentDetailrequired : ValidationAttribute 
{
    public string PaymentSelected { get; set; }
    public string PaymentType { get; set; }

    public override bool IsValid(object value)
    {
        if (PaymentSelected != PaymentType)
            return true;
        var stringDetail = (string) value;
        if (stringDetail.Length == 0)
            return false;
        return true;
    }
}

执行:

[JEPaymentDetailrequired(PaymentSelected = PaymentMethod,PaymentType = "Cheque",ErrorMessage = "Cheque name must be completed when payment type of cheque")]

有没有人有这种验证的经验?将它写入控制器会更好吗?

谢谢你的帮助.

解决方法

我会在模型中编写验证逻辑,而不是控制器.控制器应该只处理视图和模型之间的交互.由于它是需要验证的模型,我认为它被广泛认为是验证逻辑的地方.

对于依赖于另一个属性或字段的值的验证,我(遗憾的是)没有看到如何完全避免在模型中为其编写一些代码,如Wrox ASP.NET MVC书中所示,有点像:

public bool IsValid
{
  get 
  {
    SetRuleViolations();
    return (RuleViolations.Count == 0); 
  }
}

public void SetRuleViolations()
{
  if (this.PaymentMethod == "Cheque" && String.IsNullOrEmpty(this.ChequeName))
  {
    RuleViolations.Add("Cheque name is required","ChequeName");
  }
}

以声明方式进行所有验证会很棒.我确信你可以创建一个requiredDependentAttribute,但那只能处理这种逻辑.甚至稍微复杂一点的东西需要另一个非常具体的属性,等等,它会很快变得疯狂.

猜你在找的asp.Net相关文章