ASP.NET MVC中的ValidationResult:如何检测字段是否是必需的

时间:2014-07-24 09:52:24

标签: c# asp.net asp.net-mvc validation data-annotations

我正在编写我的个性化验证,我想知道是否可以检索有关要验证的对象的更多详细信息。

    protected override ValidationResult IsValid(object value, 
                                          ValidationContext validationContext)
    {
        var currentObj = validationContext.ObjectInstance;
        // How can I find if this currentObj is Required???
        // Logic....

        return ValidationResult.Success;
    }

4 个答案:

答案 0 :(得分:0)

这是一个商业规则。我们无法知道。您可以找到属性并查找其属性,例如,当相关属性带有RequiredAttribute时执行空检查。

答案 1 :(得分:0)

您要做的是查明您使用自己的验证属性标记的属性是否也标记为[必需]?如果是这种情况,您可以使用反射来检查属性是否已具有特定属性(在这种情况下需要)。

var property = validationContext.ObjectInstance.GetType().GetProperty(validationContext.MemberName);
if (property.IsDefined(typeof(RequiredAttribute), false)) 
{
   ... this means it does have the attribute
}

!我没有测试过这段代码,只做了几次。我不是100%确定' validationContext.MamberName'确实是您为属性赋予的属性的名称(尽管它应该是)。不过我已经使用这种类型的反射来检查属性是否具有分配给它的属性。可能需要稍微调整一下,但我希望它可以工作......

答案 2 :(得分:0)

您可以将所需字段维护为列表。

            List<Control> requiredFieldlst;
            private void setupControlsToValidate()
            {
                requiredFieldlst = new List<Control>();
                requiredFieldlst.Add(txtCompanyName);
                requiredFieldlst.Add(txtBillingAddress);
                requiredFieldlst.Add(txtCity);

            }

然后您可以在页面加载中调用此方法。当您点击按钮或任何其他事件时,您可以使用以下方法检查所有必填字段是否已填写

            private bool InputValidation()
            {

                foreach (Control thisControl in requiredFieldlst) //Required fields and special character validation
                {
                    if (string.IsNullOrEmpty(((TextBox)thisControl).Text))
                    {
                        //Do not save, show messagebox.
                        MessageBox.Show("Some required Fields are missing....!", "Error", MessageBoxButtons.OK);
                        ((TextBox)thisControl).Focus();
                        return false;
                    }

                }

答案 3 :(得分:0)

Astian感谢您的建议:它几乎是&#34;正确的:) 这里是我用来完成任务的代码(我不知道它是否是最好的代码):

string nameOfMyObject = "objRequired";    
var property = validationContext.ObjectInstance.GetType().GetProperty(nameOfMyObject);
bool flagIsRequired = property.IsDefined(typeof(RequiredAttribute), true);
if(flagIsRequired){
    ......

希望这有帮助!