我尝试使用nameof:
向ModelState添加错误 @Html.ValidationMessageFor(m => m.Foo.Bar)
在视图中,此标记为name
Foo.Bar
。
当我添加模型状态错误时,我必须将该错误键入name
,因此我使用nameof(Foo.Bar)
- 但是当我需要Bar
时,这只会给我Foo.Bar
1}}。现在我可以硬编码Foo.Bar
,但我宁愿使用强类型的方法。我有什么选择?
答案 0 :(得分:4)
没有内置的方法可以做到这一点,但有一些解决方法。
您可以自己连接名称空间的名称(没有运行时惩罚,但很难维护):
String qualifiedName = String.Format("{0}.{1}", nameof(Foo), nameof(Bar));
另一个选择是使用reflecton直接获取完全限定名称(更容易,但有一些运行时间惩罚):
String qualifiedName = typeof(Foo.Bar).FullName;
希望这有帮助。
答案 1 :(得分:1)
更好的方法是使用表达式树 您可以拥有自己的 ValidationMessageFor 扩展方法 检查以下示例中的 NameOf 方法
using System;
using System.Linq;
using System.Linq.Expressions;
namespace Name
{
class MyClass
{
public int MyProperty { get; set; }
public MyClass Foo { get; set; }
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(new MyClass().NameOf(m => m.MyProperty));//MyProperty
Console.WriteLine(new MyClass().NameOf(m => m.Foo.MyProperty));//Foo.MyProperty
Console.ReadLine();
}
}
public static class MyExtentions
{
public static string NameOf<T, TProperty>(this T t, Expression<Func<T, TProperty>> expr)
{
return string.Join(".", expr.ToString().Split('.').Skip(1));
}
}
}