使用T4模板从EF实体模型生成模型类。我有部分模型类,其唯一目的是向模型类添加[MetadataType(typeof(xxxMetdata))]
属性。最后,我有一个类(xxxMetadata),其中包含我的数据注释(显示名称,格式等)。典型的模型名为TestABC123,其元数据类名为TestABC123Metadata
如何注释我的元数据类以防止在我的CRUD视图中生成/显示特定属性?我知道我可以在生成视图后删除属性,但我宁愿首先不生成属性。
我正在使用带有EF的MVC 4 RC。
谢谢!
更新1 -
这是我的部分课......
namespace XXX.Web.Models
{
[MetadataType(typeof(TestAbcMetadata))]
public partial class TestAbc
{
}
}
这是我的元数据类......
namespace XXX.Web.Models
{
using System.ComponentModel;
public partial class TestAbcMetadata
{
[ScaffoldColumn(false)]
public int Id { get; set; }
[ScaffoldColumn(false)]
public int TestTypeId { get; set; }
[DisplayName("Visit Number")]
[Required]
public int VisitId { get; set; }
}
}
我尝试将[ScaffoldColumn(false)]
添加到元数据类中的某个属性,但该属性仍显示在生成的视图代码中。想法?
答案 0 :(得分:0)
为您的视图创建 ViewModels 。这些是您用来处理视图的普通POCO。
前:
public class AddUser
{
public string EmailAddress { set;get;}
public string Age { set;get;}
}
使用这些ViewModel在控制器操作和视图之间传输数据
public ActionResult GetThat()
{
var addUserVM=new AddUser();
return View(addUserVM);
}
您可以保持EF生成的类不变。那些代表您的域模型。但是视图模型适用于您的视图。它可能看起来很相似。但并非总是如此。
您可能需要一个映射层,以根据需要将您的Domain对象类映射到ViewModel。您可以考虑使用 AutoMapper 等库来编写或编写自己的代码。
答案 1 :(得分:0)
您需要做的是从头开始创建视图模型,并通过排除您不希望在视图上显示的属性将模型映射到此视图模型。
在viewmodel中尝试以下内容:
[HiddenInput(DisplayValue=false)]
public int ID { get; set; }
这是一篇很好的文章,可以澄清您的问题:What is an ASP.NET MVC ViewModel?
您可能会发现参考上一篇文章和讨论很有用:Search for an item in a ViewBag or use ViewModel instead?