Нет элемента ViewData типа 'IEnumerable <SelectListItem>', который имеет ключ 'course' - PullRequest
1 голос
/ 29 марта 2012

У меня проблема с заполнением данных внутри выпадающего списка ... Я думаю, так как я использую частичное представление, поэтому оно создает проблему. Вот мой код:

public ActionResult Register()
{
    var course = from Course c in Enum.GetValues(typeof(Course))
                     select new { ID = c, Name = c.ToString() };
     ViewData["course"] = new SelectList(course, "ID", "Name");
     return view();
}

 public enum Course
{
    [Display(Name = "Basic Level", ShortName = "Basic")]
    Basic = 1,

    [Display(Name = "Intermidiate Level")]
    Intermidiate = 2,

    [Display(Name = "Advance Level")]
    Advance = 3
}

Это мой главный вид:

<table style="margin-top: 10px">
<tr>
    <td valign="top">
        @{Html.RenderPartial("LogOnPartial");}
    </td>
    <td width="20px">
    </td>
    <td align="left">
        @{Html.RenderPartial("CreatePartial");}
    </td>
</tr>

Я написал это в своем частичном представлении (CreatePartial):

<td>
       @Html.DropDownList("course");
</td>

Пожалуйста, помогите мне

1 Ответ

1 голос
/ 29 марта 2012

Это должно работать.Я не могу воспроизвести проблему.

Модель:

public enum Course
{
    [Display(Name = "Basic Level", ShortName = "Basic")]
    Basic = 1,

    [Display(Name = "Intermidiate Level")]
    Intermidiate = 2,

    [Display(Name = "Advance Level")]
    Advance = 3
}

Контроллер:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var course = from Course c in Enum.GetValues(typeof(Course))
                     select new { ID = c, Name = c.ToString() };
        ViewData["course"] = new SelectList(course, "ID", "Name");
        return View();
    }
}

Index.cshtml просмотр:

@{Html.RenderPartial("CreatePartial");}

CreatePartial.cshtml частичный:

@Html.DropDownList("course")

Я подозреваю, что это не работает после отправки формы, а не при ее первоначальной загрузке.И это может произойти, потому что вы, вероятно, забыли заполнить ViewData["course"] в вашем действии [HttpPost] и все же попытались снова отобразить то же представление.Если вы хотите снова отобразить то же представление, убедитесь, что вы заполняете ViewData["course"] так же, как вы делали в своем действии GET, которое использовалось для первоначальной визуализации страницы.

Еще одна вещь, на которую следует обратить внимание, это то, что вы ненет другого ViewData["course"] значения, которое конфликтует.

...