在使用Steven Sanderson 的@Html.BeginCollectionItem助手时,我正在尝试使用IValidatableObject接口验证服务器端的集合项。
我想防止用户选择两个相等的项目。例如,给定用户所说的习语列表,可以回发这些值:
English
English
Spanish
Validate
实现如下所示:
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
foreach(var idiom in Idioms)
{
if(Idioms.Any(i => i != idiom && i.Idiom == idiom.Idiom))
{
yield return new ValidationResult("Idiom already selected", new string[] { "Idiom" });
}
}
}
问题在于MemberName
传递给的 ("Idiom")与字典中的现在ValidationResult
不同,因为 Steven 的助手使用's 并且看起来像这样:MemberName
ModelState
Guid
[42] = {[Idioms[83c2c6db-0157-42f3-bf3f-f7c9e6bc0a37].Idiom, System.Web.Mvc.ModelState]}
如您所见Idiom != [Idioms[83c2c6db-0157-42f3-bf3f-f7c9e6bc0a37].Idiom
。
在最好的情况下,我必须有一种传递方式,例如[Idioms[83c2c6db-0157-42f3-bf3f-f7c9e6bc0a37].Idiom
,MemberName
但我不知道如何从 the 中获取此信息,validationContext
或者即使有可能。无论如何,这必须是动态的。
你知道有什么办法可以克服这个吗?