-1

模型类是使用 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)]到元数据类中的一个属性,但该属性仍然出现在生成的视图代码中。想法?

4

2 回答 2

0

您需要做的是从头开始创建一个视图模型,并通过排除您不想出现在视图上的属性将您的模型映射到该视图模型。

在您的视图模型中尝试以下操作:

[HiddenInput(DisplayValue=false)]
public int ID { get; set; }

这是一个很好的帖子,可以澄清您的问题:什么是 ASP.NET MVC ViewModel?

您可能会发现参考之前的帖子和讨论很有用:Search for an item in a ViewBag or use ViewModel instead?

于 2012-06-19T01:36:49.960 回答
0

为您的 View创建ViewModel。这些是您将用来处理视图的普通 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 生成的类原样。这些代表您的域模型。但是视图模型适用于您的视图。它可能看起来很相似。但不总是。

您可能需要一个映射层来根据需要将您的域对象类映射到您的 ViewModel。您可以考虑为此使用AutoMapper 之类的库或编写自己的代码。

于 2012-06-18T18:30:02.713 回答