2010-09-13 3 views
1

Я использую MVC 2 и структуру сущности 4. На моей странице создания приложения у меня есть раскрывающийся список, который я заполнил значениями из моего перечисления типа AccountType. Это, как я это сделал:ASP.NET MVC 2 Проблема с распаковкой

public ActionResult Create() 
     { 
     // Get the account types from the account types enum 
     var accountTypes = from AccountType at 
          in Enum.GetValues(typeof(AccountType)) 
          select new 
          { 
           AccountTypeID = (int)Enum.Parse(typeof(AccountType), at.ToString()), 
           AccountTypeName = GetEnumFriendlyName(at) 
          }; 
     ViewData["AccountTypes"] = new SelectList(accountTypes, "AccountTypeID", "AccountTypeName"); 

     return View(); 
     } 

Это то, что мой код выглядит для этого выпадающего списка данных:

<%= Html.DropDownList("AccountTypeID", (SelectList)ViewData["AccountTypes"], "-- Select --") %> 

После загрузки страницы я начинаю вводить несколько значений. Я выбираю значение из выпадающего списка. Когда все необходимые вводятся, я нажимаю кнопку «Отправить». Ниже просто кусок кода:

[HttpPost] 
     public ActionResult Create(Application application) 
     { 
     if (ModelState.IsValid) 
     { 
      application.ApplicationState = (int)State.Applying; 
     } 

     return View(); 
     } 

Тогда я получаю следующее сообщение об ошибке, не уверен, что это значит, но я сделал Google это, попробовал образцы, но я все еще получаю сообщение. Вот сообщение об ошибке:

There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'AccountTypeID'. 

Я даже изменил выпадающий список в целях:

<%= Html.DropDownList("AccountTypeID", (IEnumerable<SelectListItem>)ViewData["AccountTypes"], "-- Select --") %> 

Я не уверен, что я делаю неправильно? Я был бы признателен за ввод данных

Спасибо.

+0

Я полагаю, что класс Application содержит свойство AccountTypeID? Ошибка на POST, или что? Вопрос немного расплывчатый. – mare

ответ

1

В вашем действии POST вам нужно заполнить ViewData["AccountTypes"] так же, как вы делали в вашем GET действия, потому что вы возвращаете тот же вид, и это мнение зависит от него:

[HttpPost] 
public ActionResult Create(Application application) 
{ 
    if (ModelState.IsValid) 
    { 
     application.ApplicationState = (int)State.Applying; 
    } 

    ViewData["AccountTypes"] = ... // same stuff as your GET action 
    return View(); 
} 

Очевидно, что этот ответ приходит с обычной оговоркой я всегда, когда я вижу, кто-то использует ViewData вместо просмотра моделей и сильно типизированные: не используйте ViewData, вид использования модели и сильно типизированные ,

+0

Спасибо. Это довольно старый пост. Это было, когда я впервые начал делать MVC. Я научился не использовать ViewData. –

1

Первое: вы не можете иметь дополнительное значение, чтобы бросить в Enum, так что вы должны получить в сообщении строку, а затем сделать некоторые логики брось вам ENUM:

[HttpPost] 
    public ActionResult Create(string application) 
    { 
     if (ModelState.IsValid) 
     { 
      // Do your stuff here to convert this string to your Enum 
      // But you should take care for null string 
     } 

     return View(); 
    } 

Второе: ваш Id DropDownList должен быть таким же именем имя сообщение вашего параметра действия: если вы поставите

<%: Html.DropDownList("applicationID", (SelectList)ViewData["AccountTypes"], "-- Select --")%> 

тогда ваше действие должно имеет «ApplicationID» параметр не «приложение»