在我的MVC 5应用程序中,当我想要返回表单值的验证错误时,我在Controller中使用此模式:
ModelState.AddModelError("PropertyName", "Validation Message");
是否有建议的做法在Controller中不使用字符串文字来获取属性名称?
我使用的是.Net 4.5,我宁愿不升级到.Net 4.6。 我使用的是Visual Studio 2013,而不愿意升级到Visual Studio 2015。
答案 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");