【问题标题】:MVC 4 : Possible to use variable from validation in validation message?MVC 4:可以在验证消息中使用验证变量吗?
【发布时间】:2013-07-14 01:29:42
【问题描述】:

我的项目中的许多表格都有零件号输入。目前在控制器中,我经常测试部件号以查看部件是否存在或用户是否有权访问,或者部件是否已过时,然后根据条件我重新加载视图,通过字符串参数传递消息,然后通过 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 的方法,但是我相信这些的关键与属性有关,对吗?因此,我不清楚如何检测属性何时未能通过特定验证,并使用属性值作为变量以这种方式生成消息。

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

谢谢。

【问题讨论】:

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


    【解决方案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)
    

    【讨论】:

    • 在测试部分是否为备用并将验证属性设置为我使用的找到的备用部分后:返回新的 ValidationResult(AltPart);。然后 [PartAlternateValidation(AltPart = "Use Alternate Part: {0}")] 添加零件模型。谢谢!
    猜你喜欢
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 2015-03-17
    相关资源
    最近更新 更多