新的辅助方法EditorFor和TextBoxFor在避免视图中硬编码的字段名称方面非常酷。
我正在编写验证函数,其中的服务验证复杂的模型数据。如果某个字段有错误,则服务应将该字段的错误推送到模型状态字典中。
是否有生成完整模型名称的辅助方法?
编辑:
样本模型:
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.A的输入字段的名称为"InnerModel.SomethingMoreToValidate.A“。要将模型状态错误绑定到字段,我必须将具有此名称的错误放入ModelStateDictionary中。
在显示InnerModel数据的视图中,我可以这样写:
Html.EditorFor(m => m.SomethingMoreToValidate[0].A);如果属性被重命名,编译器会警告我。在验证控制器或服务类中,我必须写:
ModelState.AddModelError(
"InnerModel.SomethingMoreToValidate[0].A",
"There is a problem with this field");如果一个属性被重命名,如果我没有其他检查,比如unittest,就没有反馈。我想写下:
ModelState.AddModelErrorFor(
m => m.InnerModel.SomethingMoreToValidate[0].A,
"There is a problem with this field")发布于 2011-08-26 17:08:51
您可以使用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");话虽如此,您显然应该在正确编写的应用程序中进行单元测试。
https://stackoverflow.com/questions/7192242
复制相似问题