92

次のように生成されたコードファイルを作成する方法はありますか?

public partial class A 
{
    public string a { get; set; }
}

そして別のファイルで:

public partial class A 
{
    [Attribute("etc")]
    public string a { get; set; }
}

データベースからクラスを生成し、生成されていないファイルを使用してマークアップできるようにするにはどうすればよいですか?

4

5 に答える 5

35

スコット・ガスリーの記事(終わり近く)でこのようなことが行われているのを見たことがありますが、自分で試したことはありません。
http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

[MetadataType(typeof(Person_Validation))]
public partial class Person
{
    // Partial class compiled with code produced by VS designer
}

[Bind(Exclude="ID")]
public class Person_Validation
{
    [Required(ErrorMessage = "First Name Required")]
    [StringLength(50, ErrorMessage = "Must be under 50 characters")]
    public string FirstName { get; set; }

    [Required(ErrorMessage = "Last Name Required")]
    [StringLength(50, ErrorMessage = "Must be under 50 characters")]
    public string LastName { get; set; }

    [Required(ErrorMessage = "Age Required")]
    [Range(0, 120, ErrorMessage = "Age must be between 0 and 120")]
    public int Age { get; set; }

    [Required(ErrorMessage = "Email Required")]
    [Email(ErrorMessage = "Not a valid email")]
    public string Email { get; set; }
}
于 2010-09-23T21:05:06.843 に答える
0

そうではありません。コンパイラは、メンバーが複数の部分で定義されていると不平を言います。ただし、カスタム属性の使用は本質的に反射的であるため、「メタデータ」クラスを定義し、それを使用してデコレータを含めることができます。

public class A
{
   public string MyString;
}

public class AMeta
{
   [TheAttribute("etc")]
   public object MyString;
}

...

var myA = new A();
var metaType = Type.GetType(myA.GetType().Name + "Meta");
var attributesOfMyString = metaType.GetMember("MyString").GetCustomAttributes();
于 2010-09-23T20:58:12.097 に答える