我有一个可以用多种语言打开的站点,站点中的字符串是从产品所有者提供的XML文件中检索的。
该模型包含许多字段,但对于此问题,我们只关注FamilyName
public class RegisterViewModel
{
public Translation Translation { get; set; }
[Required(ErrorMessageResourceType = typeof(Resources.Resources), ErrorMessageResourceName = "LastNameEnter")]
[Display(Name = "Last Name")]
public string FamilyName { get; set; }
}
我之前曾经使用上述格式为我的模型上的字段获取验证和所需的错误消息。现在虽然我们有一个帮助器,它读取XML文件并创建一个包含" Item"列表的Translation对象,但每个Item都是一个包含其他属性的字符串。
我尝试将模型上的字段更改为以下格式,但它不起作用,因为我收到以下错误:
非静态字段需要对象引用。
[Required(ErrorMessage = Translation.Item.Find(x => x.Id == "FamilyName " && x.Type == "Required").Text)]
public string FamilyName { get; set; }
如何使用非静态Translation
属性设置错误消息。
转换属性在控制器的构造函数中设置。
修改
问题在于我的Translation
对象实例化依赖于请求中的查询字符串。
string Language = !String.IsNullOrEmpty(Request.QueryString["l"])? Request.QueryString["l"]: "en-en";
model.Translation = RegistrationScriptHelper.Translation.GetRegistrationScript(Request).Find(x => x.Language == Language);
编辑2: 的global.asax.cs:
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(CustomRequiredAttribute),
typeof(RequiredAttributeAdapter));
输出: