[asp.net-mvc] ‘xxx’키가있는 ‘IEnumerable <SelectListItem>’유형의 ViewData 항목이 없습니다.

Stack Overflow에 대한 몇 가지 게시물이 있지만 현재 상황에서 문제를 해결하는 것처럼 보이는 답변이 없습니다.

테이블이있는 페이지가 있고 각 행에는 여러 텍스트 필드와 드롭 다운이 있습니다. 모든 드롭 다운은 동일한 SelectList 데이터를 사용해야하므로 다음과 같이 설정했습니다.

제어 장치

ViewData["Submarkets"] = new SelectList(submarketRep.AllOrdered(), "id", "name");

전망

<%= Html.DropDownList("submarket_0", (SelectList)ViewData["Submarkets"], "(none)") %>

이 설정을 여러 곳에서 정확히 사용했지만이 특정보기에서 어떤 이유로 인해 오류가 발생합니다.

‘submarket_0’키가있는 ‘IEnumerable’유형의 ViewData 항목이 없습니다.



답변

좋아, 대답은이 문제에 대한 다른 게시물에서 파생되었으며 다음과 같습니다.

당신이 경우 ViewData를 포함 SelectList하여 같은 이름을 가진 DropDownList, 즉 “submarket_0″는 HTML은 도우미가 자동으로 채워집니다 DropDownList데이터로 는 두번째 매개 변수를 지정하지 않은 경우 이 경우 소스 selectList의입니다.

내 오류로 발생한 일은 다음과 같습니다.

드롭 다운 목록이 포함 된 테이블이 부분보기에 있고 ViewData가 변경되어 더 이상 SelectList참조한 I를 포함하지 않았기 때문에 HtmlHelper(오류를 발생하는 대신) ViewData (GRRRR!)에서 “submarket_0″이라는 SelectList를 찾으려고했습니다. !!) 여전히 찾을 수 없으며 오류가 발생했습니다. 🙂

내가 틀렸다면 나를 고쳐주세요


답변

오래된 질문이지만 여기에 문제에 대한 또 다른 설명이 있습니다. 강력한 형식의 뷰가 있고 드롭 다운 목록을 만드는 데 ViewData를 사용하지 않는 경우에도이 오류가 발생합니다. MVC 소스 를 보면 오류의 원인이 명확해질 수 있습니다 .

// If we got a null selectList, try to use ViewData to get the list of items.
if (selectList == null)
{
    selectList = htmlHelper.GetSelectData(name);
    usedViewData = true;
}

따라서 다음과 같은 것이 있다면 :

@Html.DropDownList("MyList", Model.DropDownData, "")

그리고 Model.DropDownDatanull이면 MVC는 ViewData에서 이름이 지정된 항목을 찾고 MyList해당 이름을 가진 ViewData에 개체가 없으면 오류를 발생시킵니다.


답변

나는 같은 오류가 있었는데, 문제는 잘못된 키 이름을 제공하기 때문에 오류 텍스트가 혼란 스럽다는 것 입니다.

귀하의 경우 “Submarkets”키가있는 ‘IEnumerable’유형의 ViewData 항목이 없습니다. “라고 표시되어야합니다.

내 오류는 뷰 코드 ( “하위 시장”)의 철자가 틀렸지 만 오류 텍스트는 나를 미치게 만들었습니다.

이 답변을 게시하는 이유는 저처럼이 오류를 찾는 사람들에게 IENumerable을 찾을 수 없다는 것 입니다. 문제는 IENumerable을 찾을 수 없다는 것입니다 (이 경우 “Submarkets”). 오류로 표시된 항목 ( “submarket_0”)이 아닙니다 .

받아 들여지는 대답은 매우 흥미롭지 만 두 번째 매개 변수를 지정하지 않으면 규칙이 적용된다고 말했듯 이이 경우 지정되었지만 var를 찾을 수 없습니다 (귀하의 경우에는 viewdata가 없기 때문에 내 경우에는 var 이름을 잘못 입력했습니다)

도움이 되었기를 바랍니다!


답변

문제는 제출 버튼 클릭시 포스트 백이 발생하기 때문입니다. 따라서 제출시 데이터를 게시하는 동안 View ()를 반환하기 전에 다시 작성하십시오.

ViewData["Submarkets"] = new SelectList(submarketRep.AllOrdered(), "id", "name");


답변

네임 스페이스를 확인하십시오.

당신은 할당 할 수 있습니다 System.Web.Webpages.Html.SelectListItem을 대신, 컨트롤러에 System.Web.Mvc.SelectListItem .


답변

이것도 괜찮습니다. 예 :

==> “NumberController”파일에서 :

public ActionResult Create([Bind(Include = "NumberId,Number1,Number2,OperatorId")] Number number)
{
    if (ModelState.IsValid)
    {
        ...
        ...
        return RedirectToAction("Index");
    }
    ViewBag.OperatorId = new SelectList(db.Operators, "OperatorId",
                                "OperatorSign", number.OperatorId);
    return View();
}

==> 파일보기 (Create.cshtml) :

<div class="form-group">
    @Html.LabelFor(model => model.Number1, htmlAttributes: new { @class =
                   "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.Number1, new { htmlAttributes = new {
                        @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Number1, "", new { @class =
                                   "text-danger" })
    </div>
</div>

이제이 문을 제거하면 :

ViewBag.OperatorId = new SelectList(db.Operators, "OperatorId", "OperatorSign", number.OperatorId);

(컨트롤러에서) 다음 문장 뒤에서 :

return View();

이 오류가 표시됩니다.

‘OperatorId’키가있는 ‘IEnumerable’유형의 ViewData 항목이 없습니다.

* 따라서 이러한 진술이 존재하는지 확인하십시오. *


답변

나 에게이 오류를 일으킨 문제는 데이터베이스에 새 행을 저장할 때 발생했지만 필드가 null이었습니다. 데이터베이스 테이블 디자인에서 해당 필드는 NULL이 아닙니다. 따라서 null이 아닌 필드에 대해 null 값을 사용하여 새 행을 저장하려고 할 때 Visual Studio에서이 오류가 발생했습니다. 따라서 필드에 값이 할당되었는지 확인하고 문제가 해결되었습니다.