Можете ли вы создать строго типизированный ASP.NET MVC ViewUserControl типа int или enum?
-
21-08-2019 - |
Вопрос
я хочу создать повторно используемый 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 может иметь только тип class), а затем выполнить следующее..
<% Html.RenderPartial("AnimalFileImageControl", animalType); %>
и в ViewUserControl ...
AnimalType animalType = (AnimalType) ViewData.Model;
switch (animalType)
{ ... etc ... }
ваше здоровье :)
Решение
что ж, ты мог бы:
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>
, и т.д. - Но лично я ожидаю, что было бы проще использовать нетипизированное представление и просто привести.