首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有层次结构感知的MVC3自定义验证

具有层次结构感知的MVC3自定义验证
EN

Stack Overflow用户
提问于 2011-11-22 01:55:44
回答 1查看 321关注 0票数 2

我在MVC3中有一个分层模型。我所有的基本验证都是有效的,但我有一个特殊的验证,我不知道如何实现它。

在我的特定的树层次结构模型中,我有一个字段必须是唯一的/不重复它的任何祖先节点中的值。在我的例子中,对等体不必是唯一的。

我曾尝试继承ValidationAttribute并使用validationContext.Items来存储一堆父节点,但在我看来,validationContext.Items并不是在每个级别的验证之间共享的。我不知道如何在每个子元素上正确地递归调用验证,如果这样做合适的话。

如果我正在Validating一个特定的节点,我需要访问祖先节点,或者我为传递给每个子节点的祖先节点创建的一些堆栈。

该解决方案不应该干扰其他验证器或绑定器,并且应该提供字段级错误,而不是根模型级错误。我还想避免ThreadStatic,保留字符串和其他魔术。是的,使用this technique将整个层次结构绑定到单个视图中。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2011-11-22 02:17:55

你能创建一个动作过滤器吗?这使您可以访问模型状态和valueProvider,因此您可以检查数据,然后根据需要调整错误集合。

代码语言:javascript
复制
public class ValidateForUniqueAttribute : ActionFilterAttribute
{
  public override void OnActionExecuting(ActionExecutingContext filterContext)
  {
     // filterContext.Controller.ViewData.Model

       //  modelState[key].Errors.Add( .... )
  }

}


[ValidateForUnique]
public class YourController : Controller
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8216229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档