2009-03-22 3 views
4

Ich möchte ein wiederverwendbares ASP.NET MVC ViewUserControl erstellen, das stark auf eine Enumeration typisiert ist.Können Sie ein stark typisiertes ASP.NET MVC ViewUserControl vom Typ int oder enum erstellen?

Kann dies getan werden? Wenn ich es versuchen, sagt es, dass der starke Typ kann der Viewusercontrol übernimmt, kann nur ein Referenztyp sein :(

Dies bedeutet auch, kann ich nicht einen int als TModel passieren.

Warum will ich Um dies zu tun? Ich bin an verschiedenen Stellen meiner Website, ich zeige ein einfaches Bild, das abhängig von einer Aufzählung ist. Anstatt diese Logik an mehreren Orten zu kopieren, möchte ich diese ViewUserControl resuable haben und die Enumeration übergeben.

zB.

public enum AnimalType 
{ 
    Cat, 
    Dog 
} 

// .. now code inside the view user control ... 
switch (animalType) 
{ 
    case AnimalType.Cat: source = "cat.png"; text="cute pussy"; break; 
    ... etc ... 
} 

<img src="<%=Url.Content("~/Images/" + source)%>" alt="<%=text%>" /> 

ich bin gu die Lösung essin wäre nicht zu einem stark typisierte Viewusercontrol erstellen (weil TModel Typ nur vom Typ Klasse sein kann), und dann gehen Sie wie folgt ..

<% Html.RenderPartial("AnimalFileImageControl", animalType); %> 

und im Viewusercontrol ...

AnimalType animalType = (AnimalType) ViewData.Model; 
    switch (animalType) 
    { ... etc ... } 

cheers :)

Antwort

1

gut, könnten Sie haben:

public sealed class Box<T> where T : struct { 
    public Box(T value) { Value = value; } 
    public T Value { get; private set; } 
    public static explicit operator T(Box<T> item) { 
     return item.Value; } // also check for null and throw an error... 
    public static implicit operator Box<T>(T value) { 
     return new Box<T>(value); } 
} 

und verwenden Box<int>, Box<MyEnum>, usw. - aber ich persönlich erwarte, dass es einfacher wäre, eine untypisierte Ansicht zu verwenden und einfach zu casten.

+0

re: untypisierte Ansicht - gleich. Damit werde ich fortfahren. Habe vergessen, eine Struktur zu erstellen: P Nette Idee, wenn ich es stark typisiert behalten wollte. Danke nochmal Marc :) –

Verwandte Themen