[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.DropDownData
null이면 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에서이 오류가 발생했습니다. 따라서 필드에 값이 할당되었는지 확인하고 문제가 해결되었습니다.