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

本文关键字:字段 检测 是否是 NET ValidationResult 中的 MVC 何检测 ASP | 更新日期: 2023-09-27 18:14:28

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

    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;
    }

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

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

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

!我没有测试过这段代码,也只测试过几次。我不是100%确定'validationContext。MamberName'实际上是您将属性分配给的属性的名称(尽管它应该是)。尽管如此,我还是使用这种类型的反射来检查一个属性是否被分配了一个属性。可能需要稍微调整一下,但我希望它能工作……

这是一个业务规则。我们不能知道。您可以查找属性和它们的属性,例如,当有问题的属性携带RequiredAttribute时,执行空检查。

您可以将必填字段维护为列表。

            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;
                    }
                }

谢谢你的建议:它"几乎"是正确的:)这里的代码,我使用,以实现我的任务(我不知道它是否是最好的):

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

希望这能帮到你!