.net 使用ModelState.AddModelError时避免字符串文字
在我的MVC 5应用程序中,当我想返回表单值的验证错误时,我在控制器中使用以下模式:.net 使用ModelState.AddModelError时避免字符串文字,.net,visual-studio-2013,asp.net-mvc-5,.net,Visual Studio 2013,Asp.net Mvc 5,在我的MVC 5应用程序中,当我想返回表单值的验证错误时,我在控制器中使用以下模式: ModelState.AddModelError("PropertyName", "Validation Message"); AddModelError(ctrl => SomeProperty, "Validation failed"); 是否有一种推荐做法,在控制器中不使用字符串文字作为属性名 我正在使用.NET4.5,我不想升级到.NET4.6。 我正在使用Visual Studio 2013
ModelState.AddModelError("PropertyName", "Validation Message");
AddModelError(ctrl => SomeProperty, "Validation failed");
是否有一种推荐做法,在控制器中不使用字符串文字作为属性名
我正在使用.NET4.5,我不想升级到.NET4.6。
我正在使用Visual Studio 2013,不希望升级到Visual Studio 2015。C#6介绍了运营商,因此您可以执行以下操作:
ModelState.AddModelError(nameof(this.PropertyName), "Validation Message");
但这需要Visual Studio 2015。我认为可以这样实现: 1) 定义继承
控制器的基本控制器
:
class BaseController<TCtr> : Controller
class YourController : BaseController<TCtr>
protected virtual void AddModelError<TProp>(Expression<Func<TCtr, TProp>> expression, String message)
{
var prop = (MemberExpression)expression.Body;
ModelState.AddModelError(prop.Member.Name, message);
}
3) 在BaseController
中定义以下函数:
class BaseController<TCtr> : Controller
class YourController : BaseController<TCtr>
protected virtual void AddModelError<TProp>(Expression<Func<TCtr, TProp>> expression, String message)
{
var prop = (MemberExpression)expression.Body;
ModelState.AddModelError(prop.Member.Name, message);
}
谢谢你的快速回复。然而,我使用的是.NET4.5,我不想升级到.NET4.6。我更新了问题以包含这些信息。这是一个C#6编译器特性,而不是.NET4.6特性。在.NET4.0以后的版本中,您可以使用操作符的名称运行代码(我很确定您可以针对框架的任何版本,但我碰巧测试了.NET4.0…!),再次感谢。我也在使用Visual Studio 2013,不希望升级到Visual Studio 2015。