4

列挙型に強く型付けされた再利用可能なASP.NETMVCViewUserControlを作成したいと思います。

これはできますか?私が試してみると、ViewUserControlが受け入れることができる強い型は、参照型のみであると言われています:(

これは、intをTModelとして渡すことができないことも意味します。

なぜ私はこれをしたいのですか?私は自分のサイトのさまざまな場所にいますが、列挙に依存する単純な画像を表示しています。したがって、そのロジックを複数の場所にコピーする代わりに、この再利用可能なViewUserControlを用意して、列挙型を渡したいと思います。

例えば。

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%>" /> 

解決策は、強く型付けされたViewUserControlを作成せず(TModel Typeは型クラスのみである可能性があるため)、次のようにすることだと思います。

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

およびViewUserControlで..。

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

乾杯 :)

4

1 に答える 1

1

さて、あなたは持つことができます:

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); }
}

Box<int>、などを使用しますBox<MyEnum>が、個人的には、型指定されていないビューを使用して単純にキャストする方が簡単だと思います。

于 2009-03-22T00:46:00.443 に答える