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;
}
你想做的是找出你用自己的验证属性标记的属性是否也标记为[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){
......
希望这能帮到你!