如何通过asp.net-mvc框架为模型状态字典自动生成每个字段的名称?

2026-03-30 12:451阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计437个文字,预计阅读时间需要2分钟。

如何通过asp.net-mvc框架为模型状态字典自动生成每个字段的名称?

新的辅助方法EditorFor, TextBoxFor在避免视图中硬编码字符串名称方面非同寻常。我正编写验证函数,其中包含复杂的服务验证模型数据。如果字段存在错误,服务应将此字段的错误推送到modelst。

新的辅助方法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数据的视图中,我可以写:

如何通过asp.net-mvc框架为模型状态字典自动生成每个字段的名称?

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");

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

本文共计437个文字,预计阅读时间需要2分钟。

如何通过asp.net-mvc框架为模型状态字典自动生成每个字段的名称?

新的辅助方法EditorFor, TextBoxFor在避免视图中硬编码字符串名称方面非同寻常。我正编写验证函数,其中包含复杂的服务验证模型数据。如果字段存在错误,服务应将此字段的错误推送到modelst。

新的辅助方法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数据的视图中,我可以写:

如何通过asp.net-mvc框架为模型状态字典自动生成每个字段的名称?

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");

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