Usuario
No hay ningún elemento ViewData de tipo 'IEnumerable<SelectListItem>' con la clave 'IdAmbiente'. ASP.NET MVC

Pregunta
-
Muy buen dia, tengo este error pero solo al visualizar el proyecto publicado en IIS7, cuando le doy "ver en Explorador" en el visual studio me funciona correctamente.
*En mi Clase Controller tengo esta accion que me llena los combos y me lista los documentos:
public ActionResult Index(int IdAmbiente = 0)
{
ViewBag.IdAmbiente = new SelectList(bd.FE_Ambiente, "IdAmbiente", "Ambiente", "Ambiente");
var listado = ....ToList();Variables.Listados.LGestorHisto = listado ;
return View(listado);
}*Luego tengo otra acción que me genera un reporte y cuando la llamo es que me genera ese error:
public ActionResult Report(string id)
{
LocalReport lr = new LocalReport();
string path = Path.Combine(Server.MapPath("~/Report"), "Historico.rdlc");
if (System.IO.File.Exists(path))
lr.ReportPath = path;
else
return View("Index");
ReportDataSource rd = new ReportDataSource("DataSet1", Variables.Listados.LGestorHisto);
lr.DataSources.Add(rd);
string reportType = id;
string mimeType;
string encoding;
string fileNameExtension;
string deviceInfo =
"<DeviceInfo>" +
"<OutputFormat>" + id + "</OutputFormat>" +
"<PageWidth>8.5in</PageWidth>" +
"<PageHeight>11in</PageHeight>" +
"<MarginTop>0.5in</MarginTop>" +
"<MarginLeft>0.5in</MarginLeft>" +
"<MarginRight>0.5in</MarginRight>" +
"<MarginBottom>0.5in</MarginBottom>" +
"</DeviceInfo>";
Warning[] warnings;
string[] streams;
byte[] renderedBytes;
renderedBytes = lr.Render(
reportType,
deviceInfo,
out mimeType,
out encoding,
out fileNameExtension,
out streams,
out warnings
);
return File(renderedBytes, mimeType);
}En la vista:
@using (Html.BeginForm())
{
@Html.Label("IdAmbiente", "Ambiente", new { @class = "col-sm-1 control-label" })
<div class="col-sm-2">
@Html.DropDownList("IdAmbiente", (IEnumerable<SelectListItem>)ViewBag.IdAmbiente, "--Seleccione--", new { @class = "form-control" })
</div><div><a href="@Url.Action("Report", new { id="PDF" })" target="_blank">PDF</a></div>
}
Ayuda por favor!!
Todas las respuestas
-
Me parece un poco extraño que esto le compile. Si mal no recuerdo, puesto que ViewBag es dinámico, uno no puede hacer un cast inline en razor. Me parece que el compilador se queja de esto. Entonces yo le recomendaría tratar una variable.
@using (Html.BeginForm()) { IEnumerable<SelectListItem> lista = (IEnumerable<SelectListItem>)ViewBag.IdAmbiente; @Html.Label("IdAmbiente", "Ambiente", new { @class = "col-sm-1 control-label" }) <div class="col-sm-2"> @Html.DropDownList("IdAmbiente", lista, "--Seleccione--", new { @class = "form-control" }) </div> <div><a href="@Url.Action("Report", new { id="PDF" })" target="_blank">PDF</a></div> }
Jose R. MCP
Code Samples -
Hola,
Si estas creando la lista así :
ViewBag.IdAmbiente = new SelectList(bd.FE_Ambiente, "IdAmbiente", "Ambiente", "Ambiente");
No necesitas crear un IEnumerable de tipo SelectListItem.
@Html.DropDownList("IdAmbiente", (SelectList) ViewBag.IdAmbiente, "--Seleccione--", new { @class = "form-control" })
Saludos.
JC NaupaCrispín
Lima - Perú
La magia no existe, la programación SI- Propuesto como respuesta Sergio ParraModerator lunes, 18 de abril de 2016 12:33