Можете ли вы создать строго типизированный ASP.NET MVC ViewUserControl типа int или enum? - PullRequest
4 голосов
/ 22 марта 2009

Я хочу создать повторно используемый ASP.NET MVC ViewUserControl, который строго типизирован для перечисления.

Можно ли это сделать? Когда я пытаюсь это сделать, он говорит, что строгий тип, который может принимать 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 ... }

ура :) 1018 *

1 Ответ

1 голос
/ 22 марта 2009

ну, вы могли бы иметь:

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> и т. Д. - но лично я ожидаю, что было бы проще использовать нетипизированное представление и просто привести.

...