2014-05-23 1 views
0

내가 컨트롤러에보기에서 데이터를 보낼 때이 문제가,ASP.NET MVC가 - 유형의 어떤을 ViewData 항목이 없다 '는 IEnumerable <SelectListItem>'키 '파이스'

내보기가 그 :

@model Projeto_P1.Models.Cidade 
@{ 
    ViewBag.Title = "Cadastro de Cidades"; 
} 

@using (Html.BeginForm("AddCidade", "Geral", FormMethod.Post)) 
{ 
    <div class="container"> 
     <fieldset> 
      <div> 
       @Html.Label("Cidade") 
       @Html.EditorFor(model => model.Nome) 
      </div> 
      <div> 
       @Html.Label("País") 
       @Html.DropDownListFor(model => model.Pais, (SelectList)ViewData["pais"], "Selecione", new { id = "PaisID"}) 
      </div> 
      <div> 
       @Html.Label("Estado") 
       @Html.DropDownList("Estado", Enumerable.Empty<SelectListItem>(), "Selecione") 
      </div> 

      <br /> 

      <input type="submit" value="Cadastrar" /> 
     </fieldset> 
    </div> 
} 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#PaisID").change(function() { 
      $.ajax({ 
       url: "ListaEstados", 
       type: 'POST', 
       data: { ID: $(this).val() }, 
       datatype: 'json', 
       success: function (data) { 
        var elements = ""; 
        $.each(data, function() { 
         elements = elements + '<option values="' + this.id + '">' + this.Nome + '</option>' 
        }) 
        $('#Estado').empty().attr('disabled', false).append(elements); 
       } 
      }); 
     }); 
    }); 
</script> 

내 컨트롤러에는 국가의 SelectList를 보내는 AddCidade() 액션이 있습니다. 액션을 수행하는 ListaEstados는 상태를 반환하며, 선택한 국가의 아약스를 기반으로합니다. 이 모델의 Pais 속성 이름과 일치하므로

public ActionResult AddCidade() 
    { 
     ViewData["pais"] = new SelectList(Util.getPais().ToList(), "ID", "Nome"); 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult ListaEstados(String id) 
    { 
     return Json(Util.getEstados(id)); 
    } 

    [HttpPost] 
    public ActionResult AddCidade(Cidade c) 
    { 
     c.Cadastrar(c); 
     return View(); 
    } 
} 
+1

'pais' 키의 이름이 모델의'Pais' 속성 이름과 일치하기 때문에 이름 바꾸기 e :'ViewData [ "anyOtherKeyName"] = ...','... (SelectList) ViewData [ "anyOtherKeyName"] ...'. – Zabavsky

+0

또한 [HttpPost] 메소드에서 뷰 데이터를 다시 초기화하거나 리턴 된 View()를 대체해야합니다. return과 함께 RedirectToAction ("AddCidade"); – B2K

+0

안녕하세요, 당신을 위해 TSC가 작동하지만, 지금은 다른 문제가 있습니다. 데이터를 보낼 때 컨트롤러의 데이터를 드롭 다운에 Estado에서 HTML 코드가 다음과 같이 유지합니다. 반환하는 상태에서 SQL 쿼리에 ID를 넣습니다. – user3670112

답변

0

pais 키의 이름을 바꿉니다

ViewData["anyOtherKeyName"] = new SelectList(Util.getPais().ToList(), "ID", "Nome"); 

@Html.DropDownListFor(model => model.Pais, (SelectList)ViewData["anyOtherKeyName"], "Selecione", new { id = "PaisID"}) 

은 또한 당신은 this이 선택을 참조하지 않기 때문에, $.ajax 함수를 호출하기 전에 PaisID 변수를 저장해야 더 이상 :

+0

당신의 도움을위한 탱크. – user3670112

관련 문제