使用ModelState.AddModelError时避免使用字符串文字

时间:2015-12-21 16:32:28

标签: .net visual-studio-2013 asp.net-mvc-5

在我的MVC 5应用程序中,当我想要返回表单值的验证错误时,我在Controller中使用此模式:

ModelState.AddModelError("PropertyName", "Validation Message");

是否有建议的做法在Controller中不使用字符串文字来获取属性名称?

我使用的是.Net 4.5,我宁愿不升级到.Net 4.6。 我使用的是Visual Studio 2013,而不愿意升级到Visual Studio 2015。

3 个答案:

答案 0 :(得分:2)

C#6引入了nameof运算符,因此您可以执行以下操作:

ModelState.AddModelError(nameof(this.PropertyName), "Validation Message");

这需要Visual Studio 2015。

答案 1 :(得分:0)

nameof expression in .net framework 4的接受答案中,有一个模拟C#6名称操作符的类。

答案 2 :(得分:0)

我认为可以这样实现:

1)定义继承Controller

的基本控制器
class BaseController<TCtr> : Controller

2)让您的实际控件继承BaseController而不是Controller

class YourController : BaseController<TCtr>

3)在BaseController

中定义以下功能
protected virtual void AddModelError<TProp>(Expression<Func<TCtr, TProp>> expression, String message)
    {
        var prop = (MemberExpression)expression.Body;
        ModelState.AddModelError(prop.Member.Name, message);
    }

这允许您在控制器中编写类似的内容:

AddModelError(ctrl => SomeProperty, "Validation failed");