0

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

我有一些工作良好,但是我想测试的验证之一是该部件是否已过时并且有建议的备用部件号可供使用。基于属性值(部件号),我有一个服务层方法,如果部件已过时,该方法将返回一个布尔值,另一个将返回建议的使用部件号。如果可能的话,我想触发布尔检查的验证,然后将该备用零件号传递到生成的验证消息中。

这是当前形式的验证代码:

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 的 out 字符串参数,但不确定如何将它传递给消息(或从 IsValid 方法调用 FormatErrorMessage 方法?)。认为也许有一种使用 ModelState.AddModelError 的方法,但是我相信这些的关键与属性有关,对吗?因此,我对如何检测属性何时未能通过特定验证并使用属性值作为变量以这种方式生成消息感到模糊。

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

谢谢。

4

1 回答 1

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)

在此处输入图像描述

于 2013-07-14T06:10:59.787 回答