我试图从代码中访问ErrorMessageString,以获得基于用户语言的相应消息,但我遇到了一些困难。
在我的viewModel中,我有这样的内容:
[Required(ErrorMessageResourceType = typeof(Resource), ErrorMessageResourceName = "UserFirstNameReq")]
[Display(Name = "UserFirstName", ResourceType = typeof(Resource))]
public string FirstName { get; set; }从英文资源文件UserFirstNameReq = name是必需的。(这将根据用户语言选择而改变,对于德语,这将是Vorname ist erforderlich。)
现在我有了这段代码,在这里我想访问已翻译的消息,但是ErrorMessageString是不可访问的。我怎样才能得到这个价值?
public static MvcHtmlString ExtendedTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel, TProperty>> expression, object htmlAttributes)
{
var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
//If input is required in ViewModel, attach required and validation message
if (metadata.IsRequired)
{
string errorAtribute = GetErrorMessage(metadata);
return InputExtensions.TextBoxFor<TModel, TProperty>(htmlHelper, expression, (string) null, output);
}
return InputExtensions.TextBoxFor<TModel, TProperty>(htmlHelper, expression, (string) null, htmlAttributes);
}
private static string GetErrorMessage(ModelMetadata metadata)
{
string retVal = String.Empty;
var customTypeDescriptor = new AssociatedMetadataTypeTypeDescriptionProvider(metadata.ContainerType).GetTypeDescriptor(metadata.ContainerType);
if (customTypeDescriptor != null)
{
var descriptor = customTypeDescriptor.GetProperties().Find(metadata.PropertyName, true);
var req = (new List<Attribute>(descriptor.Attributes.OfType<Attribute>())).OfType<RequiredAttribute>().FirstOrDefault();
if (req != null)
{
retVal = req.ErrorMessage;
//Here instead of ErrorMessage i need ErrorMessageString
}
}
return retVal;
}以下是我需要但无法访问的截图:

任何帮助都是非常感谢的。谢谢您抽时间见我。
发布于 2015-09-30 08:39:10
如果使用反射不是问题,请尝试使用
retVal = (string)req.GetType().GetProperty("ErrorMessageString", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).GetValue(req);https://stackoverflow.com/questions/32861357
复制相似问题