我在MVC3中有一个分层模型。我所有的基本验证都是有效的,但我有一个特殊的验证,我不知道如何实现它。
在我的特定的树层次结构模型中,我有一个字段必须是唯一的/不重复它的任何祖先节点中的值。在我的例子中,对等体不必是唯一的。
我曾尝试继承ValidationAttribute并使用validationContext.Items来存储一堆父节点,但在我看来,validationContext.Items并不是在每个级别的验证之间共享的。我不知道如何在每个子元素上正确地递归调用验证,如果这样做合适的话。
如果我正在Validating一个特定的节点,我需要访问祖先节点,或者我为传递给每个子节点的祖先节点创建的一些堆栈。
该解决方案不应该干扰其他验证器或绑定器,并且应该提供字段级错误,而不是根模型级错误。我还想避免ThreadStatic,保留字符串和其他魔术。是的,使用this technique将整个层次结构绑定到单个视图中。
谢谢!
发布于 2011-11-22 02:17:55
你能创建一个动作过滤器吗?这使您可以访问模型状态和valueProvider,因此您可以检查数据,然后根据需要调整错误集合。
public class ValidateForUniqueAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// filterContext.Controller.ViewData.Model
// modelState[key].Errors.Add( .... )
}
}
[ValidateForUnique]
public class YourController : Controllerhttps://stackoverflow.com/questions/8216229
复制相似问题