2013-08-08 2 views
0

Я пытаюсь сделать мой код более удобочитаемым. Это проект MVC Я использую жесткопотребительский список выбора из другого класса mvc

ViewBag.Origin = new List<SelectListItem> 
         { 
          new SelectListItem { Text = "Born", Value = "Born"}, 
          new SelectListItem { Text = "Donated", Value = "Donated"}, 
          new SelectListItem { Text = "Bought", Value = "Bought"} 
         }; 

много времени в приложении, так что я решил, чтобы переместить его в хранилище класса.

public class Repository 
{ 

    public List<SelectListItem> GetOriginList() 
    { 
     List<SelectListItem> originItems = new List<SelectListItem> 
        { 
         new SelectListItem { Text = "Born", Value = "Born"}, 
         new SelectListItem { Text = "Donated", Value = "Donated"}, 
         new SelectListItem { Text = "Bought", Value = "Bought"} 
        }; 

     return originItems; 
    } 

Тогда попытался получить к нему доступ.

public class CowController : Controller 
{ 
    Repository repository = new Repository(); 

    ActionResult Create() { 
    ViewBag.origin = repository.GetOriginList(); 
    return View(); 

    } 
} 

Мой Посмотреть

@ Html.DropDownList ("Происхождение", "Выбор происхождения")

Но смотреть я побегу ошибку времени.

An exception of type 'System.InvalidOperationException' occurred in System.Web.Mvc.dll but was not handled in user code 

Additional information: The ViewData item that has the key 'Origin' is of type 'System.Collections.Generic.List`1[[System.Web.WebPages.Html.SelectListItem, System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]' but must be of type 'IEnumerable<SelectListItem>'. 

Работает нормально, когда жестко закодировано только на действии. Я забываю конвертировать любого типа?

ответ

3

Работал Когда я заменил использование System.Web.WebPages.Html; с использованием System.Web.Mvc.

Я не знаю, техническое различие .. но если у вас есть такая же проблема, вы можете попробовать мое решение ... Было бы здорово, если бы кто-то может прокомментировать с технической разницы ...

Другой вынос, когда Я включил обе ссылки.

Error 1 'SelectListItem' is an ambiguous reference between 'System.Web.WebPages.Html.SelectListItem' and 'System.Web.Mvc.SelectListItem' 
+0

Единственное отличие, которое я вижу, - это WebPages.Html.SelectListItem, у которого есть дополнительный конструктор, который позволяет вам переходить в SelectListItem для копирования. http://msdn.microsoft.com/en-us/library/system.web.webpages.html.selectlistitem(v=vs.111).aspx http://msdn.microsoft.com/en-us/library/ system.web.mvc.selectlistitem .aspx (v = vs.108) – stuartdotnet

0

Theres погрешность есть, корпус из изначальный. ViewBag использует типы dynamic, то это не вызовет ошибок во время компиляции, а во время выполнения, если что-то не так.

ViewBag.origin = repository.GetOriginList(); 

Но вы звоните в DropDownList

@Html.DropDownList("Origin", "Select Origin") 

Его чувствительны к регистру, вы должны изменить

ViewBag.origin to ViewBag.Origin 

или назвать его:

@Html.DropDownList("origin ", "Select Origin") 

EDIT:

Изменения Repository функция тоже:

public IEnumerable<SelectListItem> GetOriginList() 
+0

ViewBag.Origin = репозиторий.GetOriginList(); Same Error .. Дополнительная информация: Элемент ViewData с ключом «Origin» имеет тип «System.Collections.Generic.List'1 [[System.Web.WebPages.Html.SelectListItem, System.Web.WebPages, Version = 3.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35]] ', но должен иметь тип «IEnumerable ». –

+0

Странно !!! В любом случае, я проверил ваш код и хорошо работает здесь! Посмотрите на редактирование! – Fals

+0

Простая ошибка Я пытался .. Список newlist = repository.GetOriginList(); Невозможно неявно преобразовать тип 'System.Collections.Generic.IEnumerable ' to 'System.Collections.Generic.List ». Явное преобразование существует (вы пропускаете листинг?) Как вы думаете, я пропустил некоторую ссылку в классе репозитория? –

Смежные вопросы