我有一个自定义属性,它依赖于其他模型属性来运行。 该属性使用属性名称参数来从关联模型中获取值以执行验证。 我将它附加到像这样的字段
.Range("D2:D" & OutputLastRow).FormulaArray = "=MAX(("$A$2:$A$" & OutputLastRow=A2)*("$B$2:$B$" & OutputLastRow=B2)*("$C$2:$C$" & OutputLastRow))"
我已使用适配器和AdaptorProvider通过以下示例提供客户端验证Defining Custom Client Validation Rules in Asp.net Core MVC
但我无法收到错误消息,说出正确的内容,例如:AViewModel{
[DateBetweenAges(minProperty:"MinAge", maxProperty:"MaxAge", ErrorMessage = "Your age is not between {1} and {2}")]
public DateTime? DoB { get; set; }
public int MinAge { get; set; }
public int MaxAge { get; set; }
}
20和30是附加到ViewModel上的'Your age is not between 20 and 30'
和MinAge
属性的值(在加载页面时设置)
在Adapter中的GetErrorMessage(ModelValidationContextBase validationContext)方法中,我似乎根本无法获取ViewModel中的值..
在属性本身的MaxAge
方法中,我通过执行
IsValid
但是这些似乎不是适配器中的对象实例,虽然检查确实让我看到了确实有它的ViewData ..
var maxprop = validationContext.ObjectType.GetProperty(MaxProperty);
var maxPropVal = maxProperty.GetValue(validationContext.ObjectInstance, null);
我该怎么做?
我意识到我可以使用[Remote]属性,也许我最终会这样做,但这似乎意味着复制东西..
答案 0 :(得分:0)
我通过将属性的属性放入Attribute类而不是Adapter的错误消息中来完成此工作,例如:
def set_cookie_header(name, value, days=365):
dt = datetime.datetime.now() + datetime.timedelta(days=days)
fdt = dt.strftime('%a, %d %b %Y %H:%M:%S GMT')
secs = days * 86400
return ('Set-Cookie', '{}={}; Expires={}; Max-Age={}; Path=/'.format(name, value, fdt, secs))
def handler(env, start_response):
content_type = 'text/html'
headers = [('Content-Type', content_type), set_cookie_header('name', 'value')]
start_response('200 OK', headers)
...
那么您无需在DateBetweenAgesAttributeAdapter.GetErrorMessage中执行任何操作,它照原样工作。