MVC 4:可以在验证消息中使用验证变量吗?

时间:2013-07-14 01:29:43

标签: c# asp.net-mvc validation asp.net-mvc-4

我项目中的许多表单都有部件号输入。目前在控制器中我经常测试零件编号以查看零件是否存在或用户是否有访问权限或零件是否已过时,然后根据条件重新加载视图,通过字符串参数传递消息然后显示视图以显示表单提交失败的原因。我正在尝试清理它,而是使用模型属性验证。

我有一些工作正常,但我要测试的一个验证是该部件是否已过时并且有一个建议的备用部件号可供使用。根据属性值(部件号),我有一个服务层方法,如果部件已过时,将返回bool,另一个将返回建议的使用部件号。如果可能的话,我想在bool检查上触发验证,然后将该备用部件号传递给生成的验证消息。

以下是当前形式的验证码:

public class PartAlternateValidation : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        if (value == null)
        {
            return false;
        }

        GP10Service gp10svc = new GP10Service();

        //string altPart = gp10svc.GetPartAlternate(value.ToString());

        return gp10svc.CheckPartAlternate(value.ToString());
    }
}

做了相当多的搜索,但找不到任何具体讨论过的内容。想想也许我可以在IsValid中使用bool输出一个字符串参数,但不知道如何将其传递给消息(或者从IsValid方法调用FormatErrorMessage方法?)。想想也许有一种使用ModelState.AddModelError的方法,但我相信这些关键字与属性有关,对吗?因此,我对如何检测属性何时未通过特定验证并使用属性值作为变量生成消息的方式模糊不清。

可能是简单的事情,一直是做更多研究的好借口,我会继续阅读,但欢迎任何建议或提示。

感谢。

1 个答案:

答案 0 :(得分:1)

请参阅下面的提示帮助..

<强>型号:

namespace Mvc4Test.Models
{
    public class Part
    {
        [AlternateValidation(Suggetion = "Please Use 123 (This is a Suggestion)")]
        public string PartNumber { get; set; }
    }

    public class AlternateValidation : ValidationAttribute
    {
        public string Suggetion { get; set; }


        protected override ValidationResult IsValid(object value,ValidationContext validationContext)
        {
            if (value != null)
            {
                if (value.ToString() == "123")
                {

                    return ValidationResult.Success;
                }
                else
                {


                    return new ValidationResult(Suggetion);

                }
            }else
                return new ValidationResult("Value is Null");

        }
    }
}

查看:

 @Html.EditorFor(model => model.PartNumber)
 @Html.ValidationMessageFor(model => model.PartNumber)

enter image description here