none
como puedo ver los items de un viewbag

    Pregunta

  • Tengo este codigo que no funciona no se a que se debe.

    Me gustaria mostrar los campos de una variable viewbag. T

    <table class="table">
            <@tr>
                <th>
                    @Html.ActionLink("Nombre", "GrupoSeguridad", New { sortOrder = ViewBag.tabla, currentFilter=ViewBag.CurrentFilter })
                </th>
    
                <th>
                    @Html.ActionLink("Descripcion", "GrupoSeguridad", New { sortOrder = ViewBag.tabla, currentFilter=ViewBag.CurrentFilter })
                </th>
                <th></th>
            </@tr>
    
            @For Each item In ViewBag.tabla
            @<tr>
                <td>
                    @Html.DisplayFor(Function(modelItem) item.GRS_GrupoSeguridad.GRS_Nombre)
                </td>
                <td>
                    @Html.DisplayFor(Function(modelItem) item.GRS_Descripcion)
                </td>
               
                <td>
    
                    @Html.ActionLink("Delete", "GrupoSeguridad", New With {.id = item.GRS_idGrupoSeguridad})
                </td>
            
            </tr>
            Next
    
        </Table>

    engo el siguiente codigo:

    viernes, 18 de mayo de 2018 11:12

Todas las respuestas

  • Tu codigo parece contradictorio en cuanto a cual es el contenido de ViewBag.tabla.

    Por una parte, llamas a sortOrder = ViewBag.tabla, lo cual da a entender que tabla es una cadena de texto que contiene el sortOrder. Pero luego llamas a For Each item In ViewBag.tabla, lo cual daria a entender que tabla contiene un IEnumerable (ya que de lo contrario no tiene sentido aplicarle un For Each). Una de las dos cosas debe de estar mal.

    Suponiendo que tabla sea efectivamente algun objeto que se puede enumerar, entonces el codigo que has escrito en el Foreach es correcto (presumiendo, claro esta, que los nombres de campo coinciden con los que hay en tabla). Es la forma correcta de mostrar los items que llegan en ViewBag.Tabla. Si no funciona, indica que el controlador no ha cargado correctamente el objeto esperado en ViewBag.tabla.

    viernes, 18 de mayo de 2018 11:25
  • tambien tengo este codigo pero me da otro error

     <Table Class="table" id=tabla>
                <tr>
                    <th></th>
                    <th></th>
                    <th>
                        @Html.ActionLink("Descripcion", "GrupoSeguridad", New With {.sortOrder = ViewBag.tabla, .currentFilter = ViewBag.CurrentFilter})
                    </th>
                    <th>
                        @Html.ActionLink("Nombre Grupo", "GrupoSeguridad", New With {.sortOrder = ViewBag.tabla, .currentFilter = ViewBag.CurrentFilter})
                    </th>
    
    
                </tr>
                @For Each item In Model.APP_Aplicacion_GRS_GrupoSeguridad
    
                                                            @<tr>
    
                <td>@Html.ActionLink("DeleteGR", "GrupoSeguridad", New With {.id = item.GRS_IdGrupoSeguridad}, New With {.title = "Borrar", .class = "boton_borrar"})</td>
    
                                                <td>
                                @Html.DisplayFor(Function(modelItem) item.GRS_GrupoSeguridad.GRS_Descripcion)
                                                </td>
    
                                                <td>
                                @Html.DisplayFor(Function(modelItem) item.GRS_GrupoSeguridad.GRS_Nombre)
                                                </td>
    
    
                                            </tr>
                Next
    
            </Table>

    me da este error:

    'El tipo de metadatos asociado para el tipo 'CHJ.InventarioAplicacionesMVC.GRS_GrupoSeguridad' contiene las siguientes propiedades o campos desconocidos: APP_Aplicacion. Asegúrese de que los nombres de estos miembros coinciden con los nombres de las propiedades del tipo principal.'

    viernes, 18 de mayo de 2018 11:48
  • El error indica que hay una falta de concordancia entre los datos que el Controlador esta metiendo en el Modelo, y los datos que la Vista esta tratando de recibir en el Modelo. No coincide un tipo con el otro.

    Asegurate de que en el @model de la vista se declara el mismo tipo que tiene el objeto que pones en el "return View(objeto)" cuando llamas a la vista desde el controlador.

    Y si en lugar del Modelo usas el ViewBag, se sigue aplicando el mismo requisito: el tipo de objeto que metes tiene que ser igual que el tipo de objeto que sacas. Fijate bien en esto ultimo, porque en tu primer codigo estabas tratando de sacar dos tipos distintos desde la misma propiedad. Uno de los dos tiene que estar mal, y posiblemente ambos.

    Y luego asegurate de que cuando llamas a item.LoQueSea, ese "loQueSea" es realmente una propiedad de esa clase que usas tanto en el modelo como en la vista (tiene que ser la misma, no vale con que se llame igual o que se parezca).

    viernes, 18 de mayo de 2018 12:55
  • En q pueda te paso el codigo de mi controller y el de la vista, porq he hecho varios parecidos, pero con este me estoy liando un poco
    viernes, 18 de mayo de 2018 14:58
  • este es mi controller:

    Imports System.IO.Compression
    
    Imports System.Net
    Imports System.IO
    Imports PagedList
    
    
    
    Namespace Controllers
        Public Class InventarioApliController
            'Inherits System.Web.Mvc.Controller
            Inherits C_DAOController
            Private Shared db As New CHJ_InventarioAplicacionesEntities
    
    
    
            Function Index(ByVal sortOrder As String, currentFilter As String, searchString As String, page As Integer?, Optional ByVal boton As String = "") As ActionResult
                CargarCombos()
    
                If boton.Equals("Nueva Aplicacion") Then
                    Return RedirectToAction("Create")
                Else
                    ViewBag.CurrentSort = sortOrder
                    ViewBag.order1 = If(String.IsNullOrEmpty(sortOrder), "1_desc", String.Empty)
    
    
    
    
                    If Not searchString Is Nothing Then
                        page = 1
                    Else
                        searchString = currentFilter
                    End If
    
                    ViewBag.CurrentFilter = searchString
    
    
    
    
                    'Dim lAplicaciones As List(Of APP_AplicacionMD) = GetAllAplicaciones()
    
    
    
                    Dim aplicacion = From s In db.APP_Aplicacion.Where(Function(x) x.APP_Nombre IsNot Nothing) Select s
                    If Not String.IsNullOrEmpty(searchString) Then
                        aplicacion = aplicacion.Where(Function(s) s.APP_Nombre.ToUpper().Contains(searchString.ToUpper()))
                    End If
    
    
    
                    Select Case sortOrder
                        Case "1_desc"
                            aplicacion = aplicacion.OrderByDescending(Function(s) s.APP_Nombre)
                        Case Else
                            aplicacion = aplicacion.OrderBy(Function(s) s.APP_Nombre)
                    End Select
    
                    ' Añadir provincias y poblaciones
    
    
    
    
                    Dim pageSize As Integer = System.Configuration.ConfigurationManager.AppSettings("elementosXpagina")
                    Dim pageNumber As Integer = If(page, 1)
                    Return View(aplicacion.ToPagedList(pageNumber, pageSize))
                End If
            End Function
    
            Function Create() As ActionResult
                CargarCombos()
                ViewBag.Tipo = Session("ListaTiposApp")
                ViewBag.Estado = Session("ListaTiposEstado")
                ViewBag.UnidadR = Session("ListaUnidadesCHJ")
                ViewBag.NivelSeg = Session("ListaNivelSeguridad")
                ViewBag.ResponsableI = Session("ListaUsuariosDA")
                ViewBag.ResponsableContenido = Session("ListaUsuariosDA")
    
                Dim aplicacion As APP_Aplicacion = New APP_Aplicacion()
                aplicacion.APP_FechaModificacion = Now
                aplicacion.APP_FechaAlta = Now
    
                Return View(aplicacion)
            End Function
    
    
            <HttpPost()>
            <ValidateAntiForgeryToken()>
            Function create(aplicacion As APP_Aplicacion, boton As String, ChbLOPD As String, ChbMonitor As String) As ActionResult
                'ViewBag.Municipio = db.Municipio.Where(Function(muni) muni.codigoProvincia = parametro
    
                If boton IsNot Nothing Then
    
                    If boton.Equals("Guardar") Then
                        Dim ok As Boolean = False
                        Dim oAplicacion As APP_Aplicacion = Nothing
                        oAplicacion = New APP_Aplicacion
                        oAplicacion.APP_IdAplicacion = aplicacion.APP_IdAplicacion
                        oAplicacion.APP_Nombre = aplicacion.APP_Nombre
                        oAplicacion.APP_Descripcion = aplicacion.APP_Descripcion
                        oAplicacion.APP_BaseDeDatos = aplicacion.APP_BaseDeDatos
                        oAplicacion.APP_Documentacion = aplicacion.APP_Documentacion
    
                        oAplicacion.APP_Estado = aplicacion.APP_Estado
    
                        If ChbLOPD = "on" Then
                            oAplicacion.APP_LOPD = 1
                        Else
                            oAplicacion.APP_LOPD = 0
                        End If
                        If ChbMonitor = "on" Then
                            oAplicacion.APP_Monitorizado = 1
                        Else
                            oAplicacion.APP_Monitorizado = 0
                        End If
                        oAplicacion.APP_Repositorio = aplicacion.APP_Repositorio
                        oAplicacion.APP_NivelSeguridad = aplicacion.APP_NivelSeguridad
                        oAplicacion.APP_Responsable = aplicacion.APP_Responsable
                        oAplicacion.APP_Tipo = aplicacion.APP_Tipo
                        oAplicacion.APP_Ubicacion = aplicacion.APP_Ubicacion
                        oAplicacion.APP_FechaAlta = aplicacion.APP_FechaAlta
                        oAplicacion.APP_FechaModificacion = aplicacion.APP_FechaModificacion
                        oAplicacion.APP_UsuarioAlta = aplicacion.APP_UsuarioAlta
                        oAplicacion.APP_UsuarioModificacion = aplicacion.APP_UsuarioModificacion
                        oAplicacion.APP_UbicacionPruebas = aplicacion.APP_UbicacionPruebas
                        oAplicacion.APP_UnidadResponsable = aplicacion.APP_UnidadResponsable
                        oAplicacion.APP_ServidorBD = aplicacion.APP_ServidorBD
                        oAplicacion.APP_ServidorBDPruebas = aplicacion.APP_ServidorBDPruebas
                        oAplicacion.APP_ResponsableContenido = aplicacion.APP_ResponsableContenido
                        oAplicacion.APP_EmailEnvioLog = aplicacion.APP_EmailEnvioLog
    
                        If SetAplicacion(oAplicacion) = True Then
                            MsgBox("¡Se guardó con correctamente!")
                            db.SaveChanges()
                            Return RedirectToAction("Index")
                        End If
    
                    ElseIf boton.Equals("Cancelar") Then
                        Return RedirectToAction("Index")
    
                    ElseIf boton.Equals("Salir") Then
                        Return RedirectToAction("Index")
    
                    End If
    
                End If
    
    
    
                ModelState.Clear()
                Return View()
    
            End Function
    
    
            Function Edit(ByVal id As Integer?) As ActionResult
                CargarCombos()
    
    
                If IsNothing(id) Then
                    Return New HttpStatusCodeResult(HttpStatusCode.BadRequest)
                End If
    
                Dim aplicaciones As APP_Aplicacion = db.APP_Aplicacion.Find(id)
                If IsNothing(aplicaciones) Then
                    Return HttpNotFound()
                End If
    
                'If aplicaciones.APP_LOPD = 0 Then
                '    aplicaciones.APP_LOPD = False
    
                'Else
                '    aplicaciones.APP_LOPD = True
                'End If
    
                ViewBag.Tipo = Session("ListaTiposApp")
                ViewBag.Estado = Session("ListaTiposEstado")
                ViewBag.UnidadR = Session("ListaUnidadesCHJ")
                ViewBag.NivelSeg = Session("ListaNivelSeguridad")
                ViewBag.ResponsableI = Session("ListaUsuariosDA")
                ViewBag.ResponsableContenido = Session("ListaUsuariosDA")
    
                ViewBag.LOPD = aplicaciones.APP_LOPD
                ViewBag.Monitorizado = aplicaciones.APP_Monitorizado
    
                Return View(aplicaciones)
            End Function
    
            <HttpPost()>
            <ValidateAntiForgeryToken()>
            Function Edit(aplicaciones As APP_Aplicacion, ByVal VerR As String, ByVal VerDoc As String, ByVal VerUbi As String, ByVal VerUbiP As String, ByVal Boton As String, ChbLOPD As String, ChbMonitor As String) As ActionResult
    
    
    
                If IsNothing(aplicaciones.APP_IdAplicacion) Then
                    Return New HttpStatusCodeResult(HttpStatusCode.BadRequest)
                End If
                Dim Aplicacion As APP_Aplicacion = aplicaciones
                If IsNothing(Aplicacion) Then
                    Return HttpNotFound()
                End If
    
                If (VerR IsNot Nothing And aplicaciones.APP_Repositorio <> "") Then
                    System.Diagnostics.Process.Start(aplicaciones.APP_Repositorio)
                End If
    
    
                If (VerDoc IsNot Nothing And aplicaciones.APP_Documentacion <> "") Then
                    System.Diagnostics.Process.Start(aplicaciones.APP_Documentacion)
                End If
    
    
                If (VerUbi IsNot Nothing And aplicaciones.APP_Ubicacion <> "") Then
                    System.Diagnostics.Process.Start(aplicaciones.APP_Ubicacion)
                End If
    
    
                If (VerUbiP IsNot Nothing And aplicaciones.APP_UbicacionPruebas <> "") Then
                    System.Diagnostics.Process.Start(aplicaciones.APP_UbicacionPruebas)
                End If
    
                'If boton.Equals("VerR") Then
                '    System.Diagnostics.Process.Start(aplicaciones.APP_Repositorio)
                'End If
    
    
    
                If Boton IsNot Nothing Then
                    If Boton.Equals("Guardar") Then
                        Dim ok As Boolean = False
                        Dim oAplicacion As APP_Aplicacion = Nothing
                        oAplicacion = New APP_Aplicacion
                        oAplicacion.APP_IdAplicacion = aplicaciones.APP_IdAplicacion
                        oAplicacion.APP_Nombre = aplicaciones.APP_Nombre
                        oAplicacion.APP_Descripcion = aplicaciones.APP_Descripcion
                        oAplicacion.APP_BaseDeDatos = aplicaciones.APP_BaseDeDatos
                        oAplicacion.APP_Documentacion = aplicaciones.APP_Documentacion
    
                        oAplicacion.APP_Estado = aplicaciones.APP_Estado
                        If ChbLOPD = "on" Then
                            oAplicacion.APP_LOPD = 1
                        Else
                            oAplicacion.APP_LOPD = 0
                        End If
                        If ChbMonitor = "on" Then
                            oAplicacion.APP_Monitorizado = 1
                        Else
                            oAplicacion.APP_Monitorizado = 0
                        End If
    
                        oAplicacion.APP_Repositorio = aplicaciones.APP_Repositorio
                            oAplicacion.APP_NivelSeguridad = aplicaciones.APP_NivelSeguridad
                            oAplicacion.APP_Responsable = aplicaciones.APP_Responsable
                            oAplicacion.APP_Tipo = aplicaciones.APP_Tipo
                            oAplicacion.APP_Ubicacion = aplicaciones.APP_Ubicacion
                            oAplicacion.APP_FechaAlta = aplicaciones.APP_FechaAlta
                            oAplicacion.APP_FechaModificacion = aplicaciones.APP_FechaModificacion
                            oAplicacion.APP_UsuarioAlta = aplicaciones.APP_UsuarioAlta
                            oAplicacion.APP_UsuarioModificacion = aplicaciones.APP_UsuarioModificacion
                            oAplicacion.APP_UbicacionPruebas = aplicaciones.APP_UbicacionPruebas
                            oAplicacion.APP_UnidadResponsable = aplicaciones.APP_UnidadResponsable
                            oAplicacion.APP_ServidorBD = aplicaciones.APP_ServidorBD
                            oAplicacion.APP_ServidorBDPruebas = aplicaciones.APP_ServidorBDPruebas
                        oAplicacion.APP_ResponsableContenido = aplicaciones.APP_ResponsableContenido
                        oAplicacion.APP_EmailEnvioLog = aplicaciones.APP_EmailEnvioLog
    
                        If SetAplicacion(oAplicacion) = True Then
                                MsgBox("¡Se guardó con correctamente!")
                                db.SaveChanges()
                                Return RedirectToAction("Index")
                            End If
    
    
    
                            'Return RedirectToAction("Edit", New With {.id = pozosSequia.id_Pozo})
    
                            CargarCombos()
    
                            Return RedirectToAction("Index")
    
                        ElseIf Boton.Equals("Salir") Then
                            Return RedirectToAction("Index")
                    End If
    
                    If Boton.Equals("Cancelar") Then
                        Return RedirectToAction("Index")
                    Else
    
                        Return RedirectToAction("Edit", New With {.id = aplicaciones.APP_IdAplicacion})
                    End If
                End If
    
    
                Return RedirectToAction("Edit", New With {.id = aplicaciones.APP_IdAplicacion})
            End Function
    
    
            Function Details(ByVal id As Integer?, ByVal VerR As String, ByVal VerDoc As String, ByVal VerUbi As String, ByVal VerUbiP As String, ByVal Boton As String) As ActionResult
    
    
    
                If IsNothing(id) Then
                    Return New HttpStatusCodeResult(HttpStatusCode.BadRequest)
                End If
                Dim Aplicaciones As APP_Aplicacion = db.APP_Aplicacion.Find(id)
                If IsNothing(Aplicaciones) Then
                    Return HttpNotFound()
                End If
    
                ViewBag.LOPD = Aplicaciones.APP_LOPD
                ViewBag.Monitorizado = Aplicaciones.APP_Monitorizado
    
    
                If IsNothing(Aplicaciones.APP_IdAplicacion) Then
                    Return New HttpStatusCodeResult(HttpStatusCode.BadRequest)
                End If
                Dim Aplicacion As APP_Aplicacion = Aplicaciones
                If IsNothing(Aplicacion) Then
                    Return HttpNotFound()
                End If
    
                Dim oVistaUnidad As Vista_Unidades = db.Vista_Unidades.FirstOrDefault(Function(x) x.CodigoUnidad = Aplicaciones.APP_UnidadResponsable)
                If oVistaUnidad IsNot Nothing Then
                    Aplicacion.APP_UnidadResponsable = oVistaUnidad.Nombre
                End If
    
                Dim oResponsable As Vista_NombresEmpleadosDA = db.Vista_NombresEmpleadosDA.FirstOrDefault(Function(x) x.sAMAccountName = Aplicaciones.APP_Responsable)
                If oResponsable IsNot Nothing Then
                    Aplicacion.APP_Responsable = oResponsable.name
                End If
    
                Dim oResponsableContenido As Vista_NombresEmpleadosDA = db.Vista_NombresEmpleadosDA.FirstOrDefault(Function(x) x.sAMAccountName = Aplicaciones.APP_ResponsableContenido)
                If oResponsableContenido IsNot Nothing Then
                    Aplicacion.APP_ResponsableContenido = oResponsable.name
                End If
    
    
                Dim oNivelSeguridad As ANS_AuxNivelSeg = db.ANS_AuxNivelSeg.FirstOrDefault(Function(x) x.ANS_IdNivelSeg = Aplicaciones.APP_NivelSeguridad)
                If oNivelSeguridad IsNot Nothing Then
    
                    ViewBag.NS = oNivelSeguridad.ANS_Descripcion
                End If
    
    
                If (VerR IsNot Nothing And Aplicaciones.APP_Repositorio <> "") Then
                    System.Diagnostics.Process.Start(Aplicaciones.APP_Repositorio)
                End If
    
    
                If (VerDoc IsNot Nothing And Aplicaciones.APP_Documentacion <> "") Then
                    System.Diagnostics.Process.Start(Aplicaciones.APP_Documentacion)
                End If
    
    
                If (VerUbi IsNot Nothing And Aplicaciones.APP_Ubicacion <> "") Then
                    System.Diagnostics.Process.Start(Aplicaciones.APP_Ubicacion)
                End If
    
    
                If (VerUbiP IsNot Nothing And Aplicaciones.APP_UbicacionPruebas <> "") Then
                    System.Diagnostics.Process.Start(Aplicaciones.APP_UbicacionPruebas)
                End If
    
    
                If Boton IsNot Nothing Then
                    If Boton.Equals("Salir") Then
                        Return RedirectToAction("Index")
                    End If
                End If
    
                Return View(Aplicaciones)
            End Function
    
    
            Function Delete(ByVal id As Integer?) As ActionResult
                If IsNothing(id) Then
                    Return New HttpStatusCodeResult(HttpStatusCode.BadRequest)
                End If
                Dim AplicacionSelec As APP_Aplicacion = db.APP_Aplicacion.Find(id)
                If IsNothing(AplicacionSelec) Then
                    Return HttpNotFound()
                Else
                    db.APP_Aplicacion.Remove(AplicacionSelec)
                    db.SaveChanges()
                    MsgBox("¡Aplicación eliminada correctamente!")
                End If
                Return RedirectToAction("Index")
            End Function
    
            Function Incidencias(ByVal id As Integer?, ByVal boton As String) As ActionResult
                Dim Aplicaciones As APP_Aplicacion = db.APP_Aplicacion.Find(id)
    
                'If boton.Equals("Nueva incidencia") Then
    
                'End If
    
                Return View(Aplicaciones)
            End Function
    
            Function GrupoSeguridad(ByVal id As Integer?, ByVal boton As String, GRS_Nombre As String) As ActionResult
    
                ViewBag.GSG = db.GRS_GrupoSeguridad.ToList
    
    
                ViewBag.GruposSeg = GetAllGrupoSeguridadPorIdAplicacion(id)
                ViewBag.tabla = New List(Of APP_Aplicacion_GRS_GrupoSeguridad)
    
    
                Dim Aplicaciones As APP_Aplicacion = db.APP_Aplicacion.Find(id)
                ViewBag.tabla = ViewBag.GruposSeg
    
                If boton IsNot Nothing Then
                    If boton.Equals("Guardar") Then
                        If GRS_Nombre = "" Then
                            Exit Function
                        End If
    
                        Dim ok As Boolean = False
                        Dim oGrupoSeguridad As GRS_GrupoSeguridad = db.GRS_GrupoSeguridad.Find(CInt(GRS_Nombre))
    
    
    
    
                        Dim lGrupoSeguridad As List(Of GRS_GrupoSeguridad) = New List(Of GRS_GrupoSeguridad)
                        lGrupoSeguridad = GetAllGrupoSeguridadPorIdAplicacion(id)
                        If lGrupoSeguridad IsNot Nothing Then
    
                            For Each ngr As Object In lGrupoSeguridad
                                If ngr.grs_nombre = oGrupoSeguridad.GRS_Nombre Then
                                    ok = True
                                End If
                            Next
    
                        End If
    
    
    
                        If ok = True Then
                            If oGrupoSeguridad.GRS_Nombre <> "" Then
                                oGrupoSeguridad = GetGrupoSeguridadPornombre(oGrupoSeguridad.GRS_Nombre)
                                oGrupoSeguridad.GRS_Descripcion =
                                SetGrupoSeguridad(oGrupoSeguridad)
                            End If
                        Else
                            oGrupoSeguridad = GetGrupoSeguridadPornombre(oGrupoSeguridad.GRS_Nombre)
                            oGrupoSeguridad.GRS_Descripcion = oGrupoSeguridad.GRS_Descripcion
                            SetAppGrs(id, oGrupoSeguridad.GRS_IdGrupoSeguridad)
                            SetGrupoSeguridad(oGrupoSeguridad)
                        End If
                    End If
                End If
    
                Return View(Aplicaciones)
            End Function
    
            Function DeleteGR(ByVal idApp As Integer?, ByVal IdGrS As Integer?)
    
                BorraGrupoDeSeguridadDeApp(idApp, IdGrS)
                MsgBox("se va a borrar el grupo")
    
    
    
            End Function
    
    
            Private Sub CargarCombos()
                Try
    
                    Session.Add("ListaTiposApp", GetAllTiposAplicaciones())
                    Session.Add("ListaTiposEstado", GetAllTiposEstado())
                    Session.Add("ListaUnidadesCHJ", GetAllUnidadesCHJ())
                    Session.Add("ListaNivelSeguridad", GetAllNivelesSeguridad())
                    Session.Add("ListaUsuariosDA", GetAllUsuarioDirectorioActivoDAO())
    
                Catch ex As Exception
                    MsgBox("no se han podido cargar los combox")
                End Try
            End Sub
    
    
    
    
        End Class
    
    End Namespace
    

    y esta es mi vista:

    @ModelType CHJ.InventarioAplicacionesMVC.APP_Aplicacion
    @*@ModelType CHJ.InventarioAplicacionesMVC.GRS_GrupoSeguridad*@
    @Code
        ViewData("Title") = "GrupoSeguridad"
        Layout = "~/Views/Shared/_Layout.vbhtml"
    End Code
    
    <h2>GrupoSeguridad</h2>
    
    
    @Using Html.BeginForm("GrupoSeguridad", "InventarioApli", Nothing, FormMethod.Post, New With {.enctype = "multipart/form-data"})
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(True)
    
        @<fieldset>
        <input type="submit" name="boton" id="NuevoGrupoSeg" value="Nueva Grupo" class="boton" />
        <br />
        <br />
    
    
    
        <div class="tabla">
            <div class="columna2">
    
                <div class="editor-label">
                    @Html.Label("Grupo")
                </div>
                <div class="editor-field">
                    @*<select id="Gr" disabled="disabled" name="Grupo" type="drw" style="width:100px;height:16px"/>*@
                    @Html.DropDownList("GRS_Nombre", New SelectList(ViewBag.GSG, "GRS_IdGrupoSeguridad", "GRS_Nombre", "GRS_Nombre"), "Seleccione Grupo", New With {.disabled = "disabled", .id = "GRS_Nombre"}) @*New With {.htmlAttributes = New With {.disabled = "true"}})*@
    
                </div>
    
            </div>
    
    
    
        </div>
    
    
    
    
    
    
        <h3>Grupo Seguridad</h3>
    
        @*<Table Class="table" id=tabla>
                <tr>
                    <th></th>
                    <th></th>
                    <th>
                        @Html.ActionLink("Descripcion", "GrupoSeguridad", New With {.sortOrder = ViewBag.tabla, .currentFilter = ViewBag.CurrentFilter})
                    </th>
                    <th>
                        @Html.ActionLink("Nombre Grupo", "GrupoSeguridad", New With {.sortOrder = ViewBag.tabla, .currentFilter = ViewBag.CurrentFilter})
                    </th>
    
    
                </tr>
                @For Each item In Model.APP_Aplicacion_GRS_GrupoSeguridad
    
                                                            @<tr>
    
                <td>@Html.ActionLink("DeleteGR", "GrupoSeguridad", New With {.id = item.GRS_IdGrupoSeguridad}, New With {.title = "Borrar", .class = "boton_borrar"})</td>
    
                                                <td>
                                @Html.DisplayFor(Function(modelItem) item.GRS_GrupoSeguridad.GRS_Descripcion)
                                                </td>
    
                                                <td>
                                @Html.DisplayFor(Function(modelItem) item.GRS_GrupoSeguridad.GRS_Nombre)
                                                </td>
    
    
                                            </tr>
                Next
    
            </Table>*@
    
    
        *<Table Class="table" id=tabla>
            <tr>
                <th></th>
                <th></th>
                <th>
                    @Html.ActionLink("Descripcion", "Edit", New With {.currentFilter = ViewBag.CurrentFilter})
                </th>
                <th>
                    @Html.ActionLink("Nombre", "Edit", New With {.currentFilter = ViewBag.CurrentFilter})
                </th>
    
    
            </tr>
            @For Each item In ViewBag.tabla
    
                @<tr>
    
                    <td>@Html.ActionLink("DeleteGR", "Index", New With {.id = item.GRS_IdGrupoSeguridad}, New With {.title = "Borrar", .class = "boton_borrar"})</td>
    
                    <td>
                        @Html.Display(item.GRS_Descripcion)
                        
                    </td>
    
                    <td>
                        @Html.Display(item.GRS_Nombre)
                    </td>
    
    
                </tr>
            Next
    
        </Table>
    
    
    
    
    
    
    
    
        <div Class="divBotonera">
            <input type="submit" id="Save" name="boton" value="Guardar" Class="boton" />
            <input type="submit" name="boton" value="Cancelar" Class="botonS" />
            <input id="Exit" type="submit" name="boton" value="Salir" Class="boton" />
        </div>
    
    
        <Script type="text/javascript">
    
            //$("#NuevoGrupoSeg").click(function (e) {
            $("#NuevoGrupoSeg").click(function (e) {
                e.preventDefault();
                var Activado = True;
                //Si la variable 'Activado' es true
                If(Activado)
                //$("input#GRS_Nombre").removeAttr('disabled');
                $("#GRS_Nombre").prop("disabled", false);
                //Cambiamos el valor por el opuesto
                Activado = !Activado;
            });
        </Script>
    
    
        @*<script type="text/javascript">
    
    
                $("#Exit").click(function (e) {
                    e.preventDefault();
                    Activado = false
                    //Si la variable 'Activado' es true
                    if (Activado == false)
    
                    $("input#Descrip").attr('disabled', true);
                    $("input#Est").attr('disabled', true);
    
    
    
    
                    //Cambiamos el valor por el opuesto
                    Activado = !Activado;
                });
            </script>*@
    
    
    
    </fieldset>End Using
    
    
    
    
    
    @Section Scripts
        @Scripts.Render("~/bundles/jqueryval")
    End Section
    
    
    
    
    
    

    la parte de

    For Each item In Model.APP_Aplicacion_GRS_GrupoSeguridad

    porque no funciona y es la que me gustaria que funcionase ahora utilizo

    @For Each item In ViewBag.tabla

    lo que pasa es que me dibuja la tabla sin nada en los campos, creo que esto

    @Html.Display(item.GRS_Descripcion)

    no debe de utilizarse de esa manera.

    Para que la parte que no funciona funcionase, ¿el controller en vez de view aplicaciones deberia ser view gruposeguridad ?aplicaciones es una lista de aplicaciones y view es una lista de grupos de seguridad.


    viernes, 18 de mayo de 2018 15:32
  • ¿Cuál es la vista (Create, delete, Index...)? Fíjate que, según el método de acción del que se trate, devuelves distintos objetos, tales como "Aplicaciones" o el resultado de "aplicacion.ToPagedList(pageNumber, pageSize)".

    Aplicaciones es del tipo App_Aplicacion (por lo menos en algunos de los métodos, no los he comprobado todos), que en principio coincide con el @model de la vista, suponiendo que el espacio de nombres sea correcto (que no se puede verificar en el código mostrado) y que la vista corresponda a alguno de los métodos que devuelven Aplicaciones (que tampoco se ve en el código).

    Pero luego en el foreach recorres Model.APP_Aplicacion_GRS_GrupoSeguridad, lo cual solo puede funcionar si dentro de la clase App_Aplicacion se define una propiedad llamada APP_Aplicacion_GRS_GrupoSeguridad que sea de un tipo que implemente la interfaz IEnumerable, y a su vez haya sido inicializado dentro del mátodo db.APP_Aplicacion.Find (y tiene que ser una inicialización materializada, no vale con que sea de tipo Lazy porque para cuando llega a la vista ya se ha cerrado el dbContext). En fin, si se cumplen todos los requisitos (que no se puede verificar con un simple vistazo al código aportado), entonces debería funcionar. De lo contrario hay que seguirlo paso a paso, preferiblemente usando las opciones de "ir a la definicion" en Visual Studio y-o usando el debugger en tiempo de ejecución para examinar los objetos, hasta que se encuentre qué es lo que no concuerda.

    viernes, 18 de mayo de 2018 16:03
  • Cuando ejecuto el bloque comentado, me recupera los datos de nombre y descripcion pero me da el error mas arriba comentado
    viernes, 18 de mayo de 2018 16:36
  • La vista se llama gruposeguridad, se le pasa aplicaciones esa tabla esta relacionada con gruposeguridad
    viernes, 18 de mayo de 2018 18:40
  • Bien, eso tiene buen aspecto. Entonces lo que resta es revisar si los campos y propiedades concuerdan entre el objeto pasado desde el controlador y los que se intentan recoger desde la Vista. Hacer esto "a vista de pájaro" sobre el código fuente es difícil, así que esto conviene hacerlo "en vivo" usando el debugger sobre el código en ejecución. Se ponen puntos de ruptura tanto en el controlador como en la vista y se examinan los campos de los objetos en el punto exacto en el que se detenga la ejecución.
    viernes, 18 de mayo de 2018 19:07
  • eso que me indicas lo estoy haciendo, y en el viewbag.tabla, vienen los datos y utilizando el codigo comentado tambien, creo que no estoy utilizando correctamente la parte comentada, cuando uso viewbag.tabla me pinta la lista sin campo, no se como utilizar
    @Html.Display(item.GRS_Descripcion)
    con los campos de una viewbag, alomejor me faltaria añadir algo como .value o algo asi
    sábado, 19 de mayo de 2018 5:14
  • Haz una prueba: Métele un CType para convertir el ViewBag a la clase correcta:

    For Each item As LaClaseDeItem in CType(ViewBag.tabla, LaClaseDeColeccion) ...

    siendo "LaClaseDeItem" y "LaClaseDeColeccion" los nombres de las clases que vienen dentro del objeto que estás metiendo en el ViewBag.Tabla. Esto convierte el tipo dynamic en el tipo declarado, y tiene la ventaja de que te funcionará el IntelliSense y te mostrará los campos disponibles. Y dará un error en tiempo de ejecución si te has equivocado y el objeto no es realmente del tipo que has declarado.


    sábado, 19 de mayo de 2018 5:49
  • no puedo utilizar esa expresion

    sin la expresion me pinta esto:cuando lo que tena que pintar son los datos que ponen en la base de datos y que al hacer una inspeccion son los que aparecen en grs_nombre y grs _descripcion.

    creo que esto esta mal definido, no se muy bien que campos poner en esta linea

    @Html.ActionLink("Nombre", "GrupoSeguridad", New With {.currentFilter = ViewBag.CurrentFilter})

    • Editado pit29 sábado, 19 de mayo de 2018 6:31
    sábado, 19 de mayo de 2018 6:22
  • he vuelto al metodo comentado que se encuentra antes del de for each de viewbag, esto es lo que capturo, son los datos que quiero mostrar en la ejecucion, con el error que me muestra

    trae los datos pero me dice que

    "El tipo de metadatos asociado para el tipo 'CHJ.InventarioAplicacionesMVC.GRS_GrupoSeguridad' contiene las siguientes propiedades o campos desconocidos: APP_Aplicacion. Asegúrese de que los nombres de estos miembros coinciden con los nombres de las propiedades del tipo principal."

    el item es tipo app_aplicacion pero la tabla app_aplicacion tiene Grs_gruposeguridada la vista esta que accedo a nombre y descripcion, creo que la parte:

       @Html.ActionLink("Descripcion", "GrupoSeguridad", New With {.sortOrder = ViewBag.tabla, .currentFilter = ViewBag.CurrentFilter})

    esta mal decalarada

    tambien me he dado cuenta de esto:

    modelitem es app_aplicacion ¿deberia convertirlo?


    • Editado pit29 sábado, 19 de mayo de 2018 7:05
    sábado, 19 de mayo de 2018 6:58
  • esa columna que se ve con datos resulta ser los datos de la aplicacion, AlmacenCHJ cuando tendria que mostrar los grupos de seguridad a los que pertenece
    sábado, 19 de mayo de 2018 8:40
  • solucionado con este codigo

       @For Each item As GRS_GrupoSeguridad In ViewBag.tabla
    
                @<tr>
    
        <td>@Html.ActionLink("DeleteGR", "DeleteGR", New With {.id = Model.APP_IdAplicacion, .idGrS = item.GRS_IdGrupoSeguridad}, New With {.title = "Borrar", .class = "boton_borrar"})</td>
    
        <td>
            @Html.Encode(item.GRS_Nombre)
        </td>
    
    
        <td>
            @Html.Encode(item.GRS_Descripcion)
    
        </td>

    muchas gracias a todos

    lunes, 21 de mayo de 2018 12:18