加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何为模型状态字典生成字段名称?

发布时间:2020-12-16 09:22:59 所属栏目:asp.Net 来源:网络整理
导读:新的辅助方法EditorFor,TextBoxFor在避免视图中的硬编码字段名称方面非常酷. 我正在编写验证函数,其中服务验证复杂的模型数据. 如果字段存在错误,则服务应将此字段的错误推送到modelstate字典中. 是否有帮助方法生成完整的模型名称? 编辑: SampleModel中:
新的辅助方法EditorFor,TextBoxFor在避免视图中的硬编码字段名称方面非常酷.

我正在编写验证函数,其中服务验证复杂的模型数据.
如果字段存在错误,则服务应将此字段的错误推送到modelstate字典中.

是否有帮助方法生成完整的模型名称?

编辑:
SampleModel中:

class CustomModel {
  public InnerModel Inner { get; set; }
}
class InnerModel {
  public String Field1 { get; set; }
  public SomethingMoreToValidate[] More { get; set; }
}
class SomethingMoreToValidate {
  public int A { get; set; }
  public int B { get; set; }
}

视图中InnerModel.SomethingMoreToValidate [0] .A的输入字段名称为“InnerModel.SomethingMoreToValidate [0] .A”.要将模型状态错误绑定到字段,我必须将带有此名称的错误放入ModelStateDictionary中.

在显示InnerModel数据的视图中,我可以写:

Html.EditorFor(m => m.SomethingMoreToValidate[0].A);

如果重命名属性,编译器会警告我.
在验证控制器或服务类中,我必须写:

ModelState.AddModelError(
  "InnerModel.SomethingMoreToValidate[0].A","There is a problem with this field");

如果重命名某个属性,如果我没有像unittests这样的其他检查,则没有反馈.
我想写:

ModelState.AddModelErrorFor(
  m => m.InnerModel.SomethingMoreToValidate[0].A,"There is a problem with this field")

解决方法

你可以使用 GetExpressionText方法编写一个帮助器:

public static string GetExpressionText<TModel,TProperty>(Expression<Func<TModel,TProperty>> expression)
{
    return ExpressionHelper.GetExpressionText(expression);
}

然后:

var expression = GetExpressionText<MyViewModel,string>(
    x => x.InnerModel.SomethingMoreToValidate[0].A
);

ModelState.AddModelErrorFor(expression,"There is a problem with this field");

话虽如此,您显然应该在正确编写的应用程序中进行单元测试.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读