我正在编写一个MVC5 / EF6网站,我正在尝试尽可能完整地保持数据模型和视图模型的分离。
所以我的EF类(存储在一个单独的程序集中)如下所示:
public class WorksOrder
{
[Key]
public int Id { get; set; }
public string CreatedById { get; set; }
}
我的视图程序集中有一个元数据类(视图控制器所在的位置),我在其中覆盖显示名称并添加错误消息
public class WorksOrder
{
[Display(Name = "Created by")]
[Required(ErrorMessage = "created by cannot be blank")]
public string CreatedById { get; set; }
}
我在视图模型中附加了两个类:
TypeDescriptor.AddProviderTransparent(
new AssociatedMetadataTypeTypeDescriptionProvider(typeof(EF.Models.WorksOrder),
typeof(ViewMetadata.WorksOrder)), typeof(EF.Models.WorksOrder));
当我显示表单时,字段标签是“CreatedById”而不是元数据类中指定的显示属性(“Created by”)。我知道AddProviderTransparent有效,因为如果我尝试提交一个CreatedById字段为空的表单,我会收到错误消息(“由不能为空”创建)。
编辑:这是Razor文件(我清除了不重要的东西(div等)。
@model App.Models.WorksOrderCreateModel
@using (Html.BeginForm())
{
@Html.LabelFor(model => model.WorksOrder.CreatedById, new { @class = "control-label col-md-3" })
@Html.TextBoxFor(model => model.WorksOrder.CreatedById, new { @class = "form-control col-md-3" })
@Html.ValidationMessageFor(model => model.WorksOrder.CreatedById)
答案 0 :(得分:4)
在MetaData类中创建类似于此的部分类。
[MetadataType(typeof(WorksOrderMetaData))]
public partial class WorksOrder
{
}
public class WorksOrderMetaData
{
[Display(Name = "Created by")]
[Required(ErrorMessage = "created by cannot be blank")]
public string CreatedById { get; set; }
}
这将有效