none
desarrollar con asp.net mvc RRS feed

  • Pregunta

  • Amigos estoy tratando de crear una pequena aplicacion en Asp.Net MVC3 pero la informacion que encuentro, basicamente es toda en C, yo estoy utilizando VB.

    Me trancado en como crear una consulta de la BD (que ya existe) utilizando la entidad de Framework y debo cargar un combo con "x" cantidad de elementos. Luego seleccionando uno, desplegar otros datos.

    No logro instrumentar eso con VB. Supongo tendria que hacerlo en el modelo y luego leer desde la vista el modelo y desplegar pero no encuentro la forma.

    Alguien me podra indicar donde buscar o leer al respecto ?

    martes, 23 de julio de 2013 19:37

Respuestas

  • hola

    pero tienes definidala view, y el action en el controles que invocas ?

    porque si es asi solo deberias asignar en el Model que definas una propeidad que sea la lista que asignaras al

    Html.DropDownListFor()

    para mostrar el combo

    o sino quieres poner esto en una clase para definirlo como modelo de la view podrias usar el ViewBag y ali definir la lista

    Public Class NombreController

        Public Function Index() As ActionResult

            Dim datos As List(Of NombreClass) = context.NombreEntidad.ToList()

            Dim model As New NombreClassModel()

            model.DatosLista = datos

            Return New View(model)

        End Function


    End Class

    si a la view que usas la defines tipada que sea del tipo de la clase del modelo NombreClassModel

    entonces podrias suar la lista para cargar el combo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:37
    martes, 23 de julio de 2013 21:43
  • En la clase Controller tengo lo siguiente:

    Function Index() as AcctionResult

    Return View()

    End Function

    Si entiendo debo enviar los datos como parametros al View pero no entiendo esto Leandro:

    Dim datos As List(Of NombreClass) = context.NombreEntidad.ToList()

    "List (Of NombreClass)" que tipo es? que debo crear?

     Eso es lo que no entiendo
    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:37
    martes, 23 de julio de 2013 21:58
  • Mirando tu ejemplo de "Lista Empleados" veo que creas una clase para la Entidad Empleados y luego haces referencia a ella.

    Esto iria en el modelo ?

    Y por otro lado analizando (en el mismo ejemplo) la function

    Public SharedFunctionObtenerTodos() AsList(OfEstudioEntity)

    esto si entiendo perfecto.

    Para mi caso en particular: Es valido crear una function de ese tipo para recorrer los datos que necesito cargar en el combo ? pues de hecho existen varias condiciones luego del "Where", y luego esta lista pasarla para cargar el combo. Ahora esto deberia ir en el modelo o en el Controlador ?

    Estoy mareado realmente.

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:37
    miércoles, 24 de julio de 2013 1:47
  • Si entiendo debo enviar los datos como parametros al View pero no entiendo esto Leandro

    sabes que la view puede ser tipada no ? o sea que puedes definir un model para que lo use la view como datos

    habias comentado que usabas entity framework, entonces alli lo que hice fue acceder al contexto y tomar los datos de una entidad para usarlos como parte del modelo de la view

    "List (Of NombreClass)" que tipo es? que debo crear?

    es del tipo de la propiedad que definas en entity framework

    o sea si tienes en el contexto una entidad Cliente, entonces esa va a ser la clase de la lista

    saludos



    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:37
    miércoles, 24 de julio de 2013 11:57
  • hola

    pero tu usas entity framework, eso no aplica aqui

    en realidad el concepto si es el mismo, solo que als clase las va a definir EF

    quizas deberias analiza los ejemplos de aqui

    http://www.asp.net/mvc/tutorials

    alli se usa mucho EF en el desarrollo de asp.net mvc

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:37
    miércoles, 24 de julio de 2013 12:00
  • Clarificando ideas, a ver si estan medianamente claros mis conceptos:

    No estoy hacienda acciones de agregar, editar, borrar. Necesito cargar en un combo solo 1 campo(nro.camion) de una table que tiene unos 10 campos.

    Una vez seleccionado este campo, desplegar de otra table la suma de la existencia (solo 2 campos) y los precios (que son 4 campos diferentes.)

    Por otro lado, desplegar en 3 combos diferentes, si se desea buscar por categoria, tipo, descripcion.

    Una vez seleccionado alguno de ellos, desplegar en una lista, los nros de camion, la existencia y los precios.

    Entonces si utilizo el Model Data Entity de Ado.Net, veo que me carga las tablas completes cosa que no necesito y por ende, crear modelos para todos los campos que tampoco necesito, solo algunos (solo 7 de un total de 40)

    Mi idea seria crear un modelo solo para esos 7 campos que necesito y hacer la consulta sql, mediante la function que utilizas tu en el ejemplo que mencionaba anteriormente en el programa de "Lista de Empleados".

    No se si este concepto esta correcto

    Lo que no tengo muy claro, es de donde llamar a esta function y como pasarla a la vista para que cargue los combos o depliegue en la lista.

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:37
    miércoles, 24 de julio de 2013 12:00
  • El Model como lo tendria que crear :

    Asi lo hice

    Public Class Model

    private _cam as string

    public property camion ()as string

    get

    return _cam

    set(value as string)

    _cam = value

    end Property

    Y en el controlador lo hice asi:

    Function Index() as ActionResult

    dim lista as list(of DatosModels) = SQL.Camiones

    dim dato as New DatosModels

    dato.camion = lista - pero aqui me da el error pues dice que "camion" es string e intent cargar los datos d euna lista generic. Donde esta mal ?

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:38
    miércoles, 24 de julio de 2013 13:59
  • En el controlador, cargue una lista generic con los datos de la BD para cargar un @Html.DropDownList

    Para enviar a la vista esos datos, debo transormarlo en algo ?

    Asi lo hice:

    Dim List as List(of Camion) = Sql.Camion

    return View(lista)

    pero me error

    Ahora la clase camion tiene solo una propiedad de tipo string, a la que hago referencia.

    Como puedo cargar este combo ?

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:38
    miércoles, 24 de julio de 2013 16:03
  • Entonces si utilizo el Model Data Entity de Ado.Net, veo que me carga las tablas completes cosa que no necesito y por ende, crear modelos para todos los campos que tampoco necesito, solo algunos (solo 7 de un total de 40)

    lo primero que tienes que hacer es aprender linq y entity framework, eso es de base

    porque si sabrias usarlo esto no lo dirias, porque sabrias que lo que puse alli es solo un ejemplo, puede usar where en el linq para filtrar los datos

    Dim datos As List(Of NombreClass) = context.NombreEntidad.Where(Function(x) x.Prop = valor).ToList()

    con eso filtras los datos en base a una propiedad de la entidad

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:39
    miércoles, 24 de julio de 2013 16:48
  • hola

    cuando haces SQL.Camiones

    SQL es el contexto de entity framework ?

    ----

    porque defines una clase

    Public Class Model

    que se llama Model si despues usas

    dim lista as list(of DatosModels)

    una clase que se llama DatosModels

    --------

    con que llase defines a la view ? porque veo que haces

    return View(lista)

    pero es del tipo List(of Camion) con que tipas a la vista

    creo que antes de lanzarte a desarrollar deberias aclarar los conceptos de vista y como conectarla a los datos

    si lees los ejemplso y tutoriales del link que pase anteriormente alli esta muy bien planteado los ejemplos

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:39
    miércoles, 24 de julio de 2013 17:01
  • SQL.Camiones es una function que devuelve el contenido de la tabla Camiones. O sea es del tipo List(of camiones)

    Es similar a la que tu hicistes en "Lista de Empleados".

    En ningun lado veo que defina Public Class model

    No entiendo que es "tipiar" la lista.

    Los tutoriaes y ejemplos los he leido todos, hace una semana estoy en esto. Y entiendo el concepto pero todo esta desarrollado en C y no trabajo con C, lamentablemente tampoco tengo tiempo de aprender esto. Lo unico que encontre de VB es algo que ya no funciona igual. Hasta hay un proyecto para crear una aplicacion en 15 minutos.

    Trato de leer todo lo que pueda, pero ya no se donde buscar.

    Voy a buscar donde leer de linq y entity framework

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:39
    miércoles, 24 de julio de 2013 17:29
  • Decidi implentar una aplicación de ejemplo para ver mejorar el entendimiento.

    En los tutoriales, comenze una aplicación en MVC 4. Voy paso a paso creando y problando. Cuando llego a crear el modulo para interactuar con la BD solo creo una clase de la siguiente manera, pues es solo ese dato el que necesito:

    Public Class Camiones

    Inheriths DBContext

    Private _cam as string

    Public Property camión as string

    get

    return _cam

    end get

    set (value as string)

    _cam = value

    end set

    End Property

    Esto es en sustitución de de la Public Class Movie y por otro lado crea la siguiente clase:

    Public Class MovieDBContext : DBContext

    public DBSET<Movie> Movies {get; set;}

    Eso que antecede no entiendo como hacerlo en VB. El : DBContext, no me permite desplegarlo y lo que sigue tampoco se a que se refiere ni como hacerlo. En principio lo deje en blanco, pero al crear el controlador para esta conexión, ahí no me permite de ninguna forma pues da el siguiente error : "Unsupport context type "

    Sigo paso a paso todo esto y ahí me tranque. Esto debiera generar nuevo código y crear las nuevas vistas etc pero aquí me tranque.

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:39
    miércoles, 24 de julio de 2013 21:09
  • Omitiendo esa etapa de crear el controlador con las vistas de crear, editar, y borrar que no las necesito. Cree el asistente para crear las entidades Datos.edmx y supuestamente creo todo bien.

    Ahora en el controlador, cree la siguiente variable: Private _db as New DatosEntities() que es el nombre de la entidad y dentro de la función Index: Return View(db.TblInvs.ToList) y el error que me da es que no pudo abrir la conexcion.

    Yo tengo Visual 2010 y actualize el MVC 4. Sera que esto ha quedado incompleto ? Ya ni se donde seguir buscando.

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:39
    miércoles, 24 de julio de 2013 22:29
  • No entiendo que es "tipiar" la lista.

    dije tipiar o tipar ? o sea definirle un tipo, si tienes una lista List(Of ) alli no tiene tipo cuando pones List(of camiones) le defines un tipo eso es tipar

    las view es lo mismo si le defines una clase como modelo la tipas con con tipo, valga la redundancia, en concreto

    Y entiendo el concepto pero todo esta desarrollado en C y no trabajo con C, lamentablemente tampoco tengo tiempo de aprender esto.

    pero puedes convertir el codigo

    http://converter.telerik.com/

    no digo que haga magia pero si pones algunas partes quizas aproxime un poco para poder entenderlo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:39
    miércoles, 24 de julio de 2013 23:09
  • Eso que antecede no entiendo como hacerlo en VB. El : DBContext, no me permite desplegarlo y lo que sigue tampoco se a que se refiere ni como hacerlo

    cuando se usan los : eso es una herencia, pro lo que veo estas implementado EF Code Fisrt

    en tu caso los : son el Inherits de vb.net, recuerda que alli estas definiendo el contexto

    cuando se define el DbSet deberia ser en tu caso

    Public Property Movies As DbSet(Of Movie)

    Nota: para que esto funione necesitas .net 4 o superior

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:39
    miércoles, 24 de julio de 2013 23:13
  • Cree el asistente para crear las entidades Datos.edmx y supuestamente creo todo bien.

    ojo porque estas mezclando las cosas, si te guas por lo tutoriales que comentaste antes usaban code first, y no un edmx

    el error que me da es que no pudo abrir la conexcion.

    defines el connection string en el web.config, podrias validarlo que este alli la definicion de la conexion


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:39
    miércoles, 24 de julio de 2013 23:25
  • Si, para tratar de entender el problema he seguido paso a paso el tutorial de "Code Firts" pero como no funciona segui leyendo y buscando y por ahi intente otras prubas con Datos.edmx. Al utilizer el asistente el test de conexion es perfecto y crea la cadena en "ConnectionString" en el archivo Web.config.

    He estado pensando que el problema que tengo es aparentemente con Linq y Entity Framework. Quizas si esto lo dejo para una etapa posterior, pues la lectura de datos de la BD no tengo problemas. Manejo otro proyecto muy grande (es en WindowsForms y cree un proyecto aparte de clases para esto) y todo funciona bien con System.Data.SqlCliente, SqlDataAdapter como con DataSet.

    Quizas para salir del paso, si utilizo este tipo de acceso a la BD, mientras hago funcionar el resto del codigo, ya propiamente de MVC. Pero de igual manera no sabria una vez teniendo los datos, cual seria el procedimiento para cargar el combo ("@Html.DropDownList"). Luego tendria que ver tambien como cargar la Lista.

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:39
    jueves, 25 de julio de 2013 0:23
  • Leandro, tratande de continuar.

    Comenze una aplicación nueva y he modificado todo lo que es etiqueta, etc. Ahora llega el momento de comenzar a cargar datos de la BD.

    La BD ya la tengo, esta cargada, en un servidor externo.

    Es valido crear las entidades con Ado.Net Entity Data Model ?

    Asi lo hice y se conecto a la BD y cargo la tabla que necesito en principio.

    Asi es lo correcto ?

    Ahora debería continuar con leer los datos en el Controlador y utilizar el modelo. Ahí donde estoy patinando

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:40
    jueves, 25 de julio de 2013 16:01
  • la siguiente declaración del ejemplo:

    Private MovieDbContex db = New MovieDbContext() que en VB seria: Private db as New MovieDbContext

    Interpreto que MovieDbContext es el nombre de la entidad que le di al crearlas, en mi caso seria DatosEntity

    Ahora lo siguiente:

    Function Inicio as ActionResult

    Return View(db.Movies.ToList())

    En Function

    No entiendo que es "Movies", en la ayuda dice que es el modelo pero a mi no me aparece. Donde estará mi error ?

    Pero a su vez en el modelo declare lo siguiente: Public Property camión as DbSet(Of InicioModel) donde "InicioModel" es el nombre de la clase en el modelo.

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:40
    jueves, 25 de julio de 2013 16:57
  • Es valido crear las entidades con Ado.Net Entity Data Model ?

    si estas usando un edmx es valido

    No entiendo que es "Movies", en la ayuda dice que es el modelo pero a mi no me aparece. Donde estará mi error ?

    es el nombre de la tabla o entidad que quieres recuperar

    en el edmx definiste entidades, bueno deebs reemplazar Movies por el nombre de alguna de esas tabla

    quizas sea

    db.camión

    aunque creo que estas volviendo a mezclara code first con otro modelo de EF, si usas un edmx no necesitas definir unina propiedad DbSet en uan clase de conecto

    o usas Code Fist o usas Database First son cosas muy distintas

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:40
    viernes, 26 de julio de 2013 5:48
  • Lo que hice Leandro fue en el controlador fue lo siguiente:

    private _db as New DatosEntities

    Return View(_dt.TblInv.ToList())

    donde "DatosEntities" es el nombre de la entidad y "TvlInv" es el nombre de la table. Pero me da el siguiente error:

    "The underlying provider failed on Open."

    La cadena de conexion, deje que la crear en forma automatica cuando cree las entidades y esta en el archvivo web.config y asi la creo:

    <Addname="DatosEntities"connectionString="metadata=res://*/Datos.csdl|res://*/Datos.ssdl|res://*/Datos.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=98.194.25.149;initial catalog=eps_bargain;persist security info=True;user id=sa;multipleactiveresultsets=True;App=EntityFramework&quot;"providerName="System.Data.EntityClient"/>

    Interpreto que no abre esa conexion, pero en el test al crearlo si lo hizo, como podria probar esto?

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:40
    viernes, 26 de julio de 2013 16:40
  • La conexion por defecto que trae el web.config es un tanto diferente:

    <addname="DefaultConnection"connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-MvcInv-20130725061958;Integrated Security=SSPI"providerName="System.Data.SqlClient"/>

    pero si cambio estos datos por los mios, no me conviene colocar alli el "user name" y la "clave" de la BD, quedaria expuesto 

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:40
    viernes, 26 de julio de 2013 16:43
  • Ya pude solucionar el error anterior, me faltaban las librerias System.Data.Lync y System.Data.Entity

    Ahora en la vista, coloqué el siguiente codigo para el combo

    @Html.DropDownList("cboCamiones")                           

    pero me da el siguiente error:

    "There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'cboCamiones'."

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:40
    viernes, 26 de julio de 2013 20:42
  • Yo quiero utilizer Database First, eso no tengo dudas.

    Ahora desde el controlador hago lo siguiente:

    dim _dt as new DatosEntities()

    dim makeList = New SelectList(_dt.TblInvs.ToList(), ""InvId")

    ViewData("List") = makeList

    Y en la lista asi:

    @Html.DropDownList("cboCamiones", New SelectList(ViewData("List")))

    pero en lugar de desplegarme los id, me despliega en su lugar: System.Web.Mvc.SelectListitem como tanta cantidad existen de registros.

    He buscado la forma de desplegar correctamente pero no doy con la tecla.

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:41
    sábado, 27 de julio de 2013 13:09

  • has un foreach al select

    algo como esto aproximadamente

    <select >

    @foreach (var c in ViewData("List") as List<EntidadCamiones_Result>)

    {

    <option value="@c.IdCamion" >@c.NombreCamion</option>

    }

    </select>

    si importaste como funcion un procedimiento almacenado al EF , este te creara una entidad automaticamente.

    Si usas linq , puedes asignar los valores a una entidad hecha manualmente.

    Saludos

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:41
    sábado, 27 de julio de 2013 15:50
  • Utilize un modelo ".edmx" para almacenar las Tablas.

    En el controlador las leo asi:

    dim _dt as new DatosEntities()

    dim makeList = New SelectList(_dt.TblInvs.ToList(), ""InvId")

    y lo paso a la lista asi: ViewData("List") = makeList

    Return View()

    No entiendo si esta leyendo mal o desplegando mal

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:41
    sábado, 27 de julio de 2013 16:18
  • hola

    solo usa

    dim _dt as new DatosEntities()
    dim makeList = New SelectList(_dt.TblInvs.ToList(), "InvId")
    ViewData("List") = makeList

    y luego en la vista

    @Html.DropDownList("List")

    el nombre que usas en el ViewData debe coincidir con el que defines en el DropDownList y no necesitas volver a convertir

    How to create a DropDownList with ASP.NET MVC

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    • Editado Leandro TuttiniMVP sábado, 27 de julio de 2013 17:59 ....
    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:41
    sábado, 27 de julio de 2013 17:59
  • A la consulta anterior le he agreagdo esta linea de codigo previamente y me funciona perfecto:

    Dim a AsIQueryable(OfTblInv) = Fromar In_dt.TblInvs OrderBy(ar.InvCam) Select(ar)

    Pero debo agregar la instruccion "Distinct" (pues el campo InvCam se repite) y no encuentro donde. He probado de varias formas y no doy donde.

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:41
    sábado, 27 de julio de 2013 21:40
  • hola

    Dim a AsIQueryable(Of TblInv) = (From ar In_dt.TblInvs OrderBy ar.InvCam Select ar).Distinct()

    igual recuerda que para que Distinct quizas debas implementar en la entidad alguna interfaz como IEquatable

    [Linq] Distinct y GroupBy usando IEquatable<>

    quizas debas crear alguna clase Partial para poder extender al la entidad TblInv ya que directo en el codigo generado por el edmx no vas a poder

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:41
    domingo, 28 de julio de 2013 6:29
  • Si Leandro, pienso lo mejor es implementar una clase parcial y usar IEqueatable.

    Ahora la idea seraia enviar la lista ya cargada ("a" en el ejemplo anterior) eliminar los duplicados y devolverla ?

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:41
    lunes, 29 de julio de 2013 17:01
  • Para pasar de la vista al controlador coloco el siguiente codigo en el controlador:

    Public Function LisUsu(byval model as RegisterModel) as ActionResut

    dim _dt as new GeneralEntities()

    Return View(_dt.TblUsuarios.ToList)

    En Function

    En base a esto, creo la View tipiada y crea la lista y entiendo debe recibir los datos del tipo @ModelType IEnumerable(of MvcTheKnife.RegisterModel)

    Ahora el error que me da dice que estoy enviando una lista generic y espera recibir una lista tipo IEnumerable.

    Como puedo vertir esto, o donde puede estar mi error ?

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:41
    sábado, 10 de agosto de 2013 15:01

Todas las respuestas

  • hola

    pero tienes definidala view, y el action en el controles que invocas ?

    porque si es asi solo deberias asignar en el Model que definas una propeidad que sea la lista que asignaras al

    Html.DropDownListFor()

    para mostrar el combo

    o sino quieres poner esto en una clase para definirlo como modelo de la view podrias usar el ViewBag y ali definir la lista

    Public Class NombreController

        Public Function Index() As ActionResult

            Dim datos As List(Of NombreClass) = context.NombreEntidad.ToList()

            Dim model As New NombreClassModel()

            model.DatosLista = datos

            Return New View(model)

        End Function


    End Class

    si a la view que usas la defines tipada que sea del tipo de la clase del modelo NombreClassModel

    entonces podrias suar la lista para cargar el combo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:37
    martes, 23 de julio de 2013 21:43
  • En la clase Controller tengo lo siguiente:

    Function Index() as AcctionResult

    Return View()

    End Function

    Si entiendo debo enviar los datos como parametros al View pero no entiendo esto Leandro:

    Dim datos As List(Of NombreClass) = context.NombreEntidad.ToList()

    "List (Of NombreClass)" que tipo es? que debo crear?

     Eso es lo que no entiendo
    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:37
    martes, 23 de julio de 2013 21:58
  • Mirando tu ejemplo de "Lista Empleados" veo que creas una clase para la Entidad Empleados y luego haces referencia a ella.

    Esto iria en el modelo ?

    Y por otro lado analizando (en el mismo ejemplo) la function

    Public SharedFunctionObtenerTodos() AsList(OfEstudioEntity)

    esto si entiendo perfecto.

    Para mi caso en particular: Es valido crear una function de ese tipo para recorrer los datos que necesito cargar en el combo ? pues de hecho existen varias condiciones luego del "Where", y luego esta lista pasarla para cargar el combo. Ahora esto deberia ir en el modelo o en el Controlador ?

    Estoy mareado realmente.

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:37
    miércoles, 24 de julio de 2013 1:47
  • Si entiendo debo enviar los datos como parametros al View pero no entiendo esto Leandro

    sabes que la view puede ser tipada no ? o sea que puedes definir un model para que lo use la view como datos

    habias comentado que usabas entity framework, entonces alli lo que hice fue acceder al contexto y tomar los datos de una entidad para usarlos como parte del modelo de la view

    "List (Of NombreClass)" que tipo es? que debo crear?

    es del tipo de la propiedad que definas en entity framework

    o sea si tienes en el contexto una entidad Cliente, entonces esa va a ser la clase de la lista

    saludos



    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:37
    miércoles, 24 de julio de 2013 11:57
  • hola

    pero tu usas entity framework, eso no aplica aqui

    en realidad el concepto si es el mismo, solo que als clase las va a definir EF

    quizas deberias analiza los ejemplos de aqui

    http://www.asp.net/mvc/tutorials

    alli se usa mucho EF en el desarrollo de asp.net mvc

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:37
    miércoles, 24 de julio de 2013 12:00
  • Clarificando ideas, a ver si estan medianamente claros mis conceptos:

    No estoy hacienda acciones de agregar, editar, borrar. Necesito cargar en un combo solo 1 campo(nro.camion) de una table que tiene unos 10 campos.

    Una vez seleccionado este campo, desplegar de otra table la suma de la existencia (solo 2 campos) y los precios (que son 4 campos diferentes.)

    Por otro lado, desplegar en 3 combos diferentes, si se desea buscar por categoria, tipo, descripcion.

    Una vez seleccionado alguno de ellos, desplegar en una lista, los nros de camion, la existencia y los precios.

    Entonces si utilizo el Model Data Entity de Ado.Net, veo que me carga las tablas completes cosa que no necesito y por ende, crear modelos para todos los campos que tampoco necesito, solo algunos (solo 7 de un total de 40)

    Mi idea seria crear un modelo solo para esos 7 campos que necesito y hacer la consulta sql, mediante la function que utilizas tu en el ejemplo que mencionaba anteriormente en el programa de "Lista de Empleados".

    No se si este concepto esta correcto

    Lo que no tengo muy claro, es de donde llamar a esta function y como pasarla a la vista para que cargue los combos o depliegue en la lista.

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:37
    miércoles, 24 de julio de 2013 12:00
  • El Model como lo tendria que crear :

    Asi lo hice

    Public Class Model

    private _cam as string

    public property camion ()as string

    get

    return _cam

    set(value as string)

    _cam = value

    end Property

    Y en el controlador lo hice asi:

    Function Index() as ActionResult

    dim lista as list(of DatosModels) = SQL.Camiones

    dim dato as New DatosModels

    dato.camion = lista - pero aqui me da el error pues dice que "camion" es string e intent cargar los datos d euna lista generic. Donde esta mal ?

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:38
    miércoles, 24 de julio de 2013 13:59
  • En el controlador, cargue una lista generic con los datos de la BD para cargar un @Html.DropDownList

    Para enviar a la vista esos datos, debo transormarlo en algo ?

    Asi lo hice:

    Dim List as List(of Camion) = Sql.Camion

    return View(lista)

    pero me error

    Ahora la clase camion tiene solo una propiedad de tipo string, a la que hago referencia.

    Como puedo cargar este combo ?

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:38
    miércoles, 24 de julio de 2013 16:03
  • Entonces si utilizo el Model Data Entity de Ado.Net, veo que me carga las tablas completes cosa que no necesito y por ende, crear modelos para todos los campos que tampoco necesito, solo algunos (solo 7 de un total de 40)

    lo primero que tienes que hacer es aprender linq y entity framework, eso es de base

    porque si sabrias usarlo esto no lo dirias, porque sabrias que lo que puse alli es solo un ejemplo, puede usar where en el linq para filtrar los datos

    Dim datos As List(Of NombreClass) = context.NombreEntidad.Where(Function(x) x.Prop = valor).ToList()

    con eso filtras los datos en base a una propiedad de la entidad

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:39
    miércoles, 24 de julio de 2013 16:48
  • hola

    cuando haces SQL.Camiones

    SQL es el contexto de entity framework ?

    ----

    porque defines una clase

    Public Class Model

    que se llama Model si despues usas

    dim lista as list(of DatosModels)

    una clase que se llama DatosModels

    --------

    con que llase defines a la view ? porque veo que haces

    return View(lista)

    pero es del tipo List(of Camion) con que tipas a la vista

    creo que antes de lanzarte a desarrollar deberias aclarar los conceptos de vista y como conectarla a los datos

    si lees los ejemplso y tutoriales del link que pase anteriormente alli esta muy bien planteado los ejemplos

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:39
    miércoles, 24 de julio de 2013 17:01
  • SQL.Camiones es una function que devuelve el contenido de la tabla Camiones. O sea es del tipo List(of camiones)

    Es similar a la que tu hicistes en "Lista de Empleados".

    En ningun lado veo que defina Public Class model

    No entiendo que es "tipiar" la lista.

    Los tutoriaes y ejemplos los he leido todos, hace una semana estoy en esto. Y entiendo el concepto pero todo esta desarrollado en C y no trabajo con C, lamentablemente tampoco tengo tiempo de aprender esto. Lo unico que encontre de VB es algo que ya no funciona igual. Hasta hay un proyecto para crear una aplicacion en 15 minutos.

    Trato de leer todo lo que pueda, pero ya no se donde buscar.

    Voy a buscar donde leer de linq y entity framework

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:39
    miércoles, 24 de julio de 2013 17:29
  • Decidi implentar una aplicación de ejemplo para ver mejorar el entendimiento.

    En los tutoriales, comenze una aplicación en MVC 4. Voy paso a paso creando y problando. Cuando llego a crear el modulo para interactuar con la BD solo creo una clase de la siguiente manera, pues es solo ese dato el que necesito:

    Public Class Camiones

    Inheriths DBContext

    Private _cam as string

    Public Property camión as string

    get

    return _cam

    end get

    set (value as string)

    _cam = value

    end set

    End Property

    Esto es en sustitución de de la Public Class Movie y por otro lado crea la siguiente clase:

    Public Class MovieDBContext : DBContext

    public DBSET<Movie> Movies {get; set;}

    Eso que antecede no entiendo como hacerlo en VB. El : DBContext, no me permite desplegarlo y lo que sigue tampoco se a que se refiere ni como hacerlo. En principio lo deje en blanco, pero al crear el controlador para esta conexión, ahí no me permite de ninguna forma pues da el siguiente error : "Unsupport context type "

    Sigo paso a paso todo esto y ahí me tranque. Esto debiera generar nuevo código y crear las nuevas vistas etc pero aquí me tranque.

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:39
    miércoles, 24 de julio de 2013 21:09
  • Omitiendo esa etapa de crear el controlador con las vistas de crear, editar, y borrar que no las necesito. Cree el asistente para crear las entidades Datos.edmx y supuestamente creo todo bien.

    Ahora en el controlador, cree la siguiente variable: Private _db as New DatosEntities() que es el nombre de la entidad y dentro de la función Index: Return View(db.TblInvs.ToList) y el error que me da es que no pudo abrir la conexcion.

    Yo tengo Visual 2010 y actualize el MVC 4. Sera que esto ha quedado incompleto ? Ya ni se donde seguir buscando.

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:39
    miércoles, 24 de julio de 2013 22:29
  • No entiendo que es "tipiar" la lista.

    dije tipiar o tipar ? o sea definirle un tipo, si tienes una lista List(Of ) alli no tiene tipo cuando pones List(of camiones) le defines un tipo eso es tipar

    las view es lo mismo si le defines una clase como modelo la tipas con con tipo, valga la redundancia, en concreto

    Y entiendo el concepto pero todo esta desarrollado en C y no trabajo con C, lamentablemente tampoco tengo tiempo de aprender esto.

    pero puedes convertir el codigo

    http://converter.telerik.com/

    no digo que haga magia pero si pones algunas partes quizas aproxime un poco para poder entenderlo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:39
    miércoles, 24 de julio de 2013 23:09
  • Eso que antecede no entiendo como hacerlo en VB. El : DBContext, no me permite desplegarlo y lo que sigue tampoco se a que se refiere ni como hacerlo

    cuando se usan los : eso es una herencia, pro lo que veo estas implementado EF Code Fisrt

    en tu caso los : son el Inherits de vb.net, recuerda que alli estas definiendo el contexto

    cuando se define el DbSet deberia ser en tu caso

    Public Property Movies As DbSet(Of Movie)

    Nota: para que esto funione necesitas .net 4 o superior

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:39
    miércoles, 24 de julio de 2013 23:13
  • Cree el asistente para crear las entidades Datos.edmx y supuestamente creo todo bien.

    ojo porque estas mezclando las cosas, si te guas por lo tutoriales que comentaste antes usaban code first, y no un edmx

    el error que me da es que no pudo abrir la conexcion.

    defines el connection string en el web.config, podrias validarlo que este alli la definicion de la conexion


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:39
    miércoles, 24 de julio de 2013 23:25
  • Si, para tratar de entender el problema he seguido paso a paso el tutorial de "Code Firts" pero como no funciona segui leyendo y buscando y por ahi intente otras prubas con Datos.edmx. Al utilizer el asistente el test de conexion es perfecto y crea la cadena en "ConnectionString" en el archivo Web.config.

    He estado pensando que el problema que tengo es aparentemente con Linq y Entity Framework. Quizas si esto lo dejo para una etapa posterior, pues la lectura de datos de la BD no tengo problemas. Manejo otro proyecto muy grande (es en WindowsForms y cree un proyecto aparte de clases para esto) y todo funciona bien con System.Data.SqlCliente, SqlDataAdapter como con DataSet.

    Quizas para salir del paso, si utilizo este tipo de acceso a la BD, mientras hago funcionar el resto del codigo, ya propiamente de MVC. Pero de igual manera no sabria una vez teniendo los datos, cual seria el procedimiento para cargar el combo ("@Html.DropDownList"). Luego tendria que ver tambien como cargar la Lista.

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:39
    jueves, 25 de julio de 2013 0:23
  • Leandro, tratande de continuar.

    Comenze una aplicación nueva y he modificado todo lo que es etiqueta, etc. Ahora llega el momento de comenzar a cargar datos de la BD.

    La BD ya la tengo, esta cargada, en un servidor externo.

    Es valido crear las entidades con Ado.Net Entity Data Model ?

    Asi lo hice y se conecto a la BD y cargo la tabla que necesito en principio.

    Asi es lo correcto ?

    Ahora debería continuar con leer los datos en el Controlador y utilizar el modelo. Ahí donde estoy patinando

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:40
    jueves, 25 de julio de 2013 16:01
  • la siguiente declaración del ejemplo:

    Private MovieDbContex db = New MovieDbContext() que en VB seria: Private db as New MovieDbContext

    Interpreto que MovieDbContext es el nombre de la entidad que le di al crearlas, en mi caso seria DatosEntity

    Ahora lo siguiente:

    Function Inicio as ActionResult

    Return View(db.Movies.ToList())

    En Function

    No entiendo que es "Movies", en la ayuda dice que es el modelo pero a mi no me aparece. Donde estará mi error ?

    Pero a su vez en el modelo declare lo siguiente: Public Property camión as DbSet(Of InicioModel) donde "InicioModel" es el nombre de la clase en el modelo.

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:40
    jueves, 25 de julio de 2013 16:57
  • Es valido crear las entidades con Ado.Net Entity Data Model ?

    si estas usando un edmx es valido

    No entiendo que es "Movies", en la ayuda dice que es el modelo pero a mi no me aparece. Donde estará mi error ?

    es el nombre de la tabla o entidad que quieres recuperar

    en el edmx definiste entidades, bueno deebs reemplazar Movies por el nombre de alguna de esas tabla

    quizas sea

    db.camión

    aunque creo que estas volviendo a mezclara code first con otro modelo de EF, si usas un edmx no necesitas definir unina propiedad DbSet en uan clase de conecto

    o usas Code Fist o usas Database First son cosas muy distintas

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:40
    viernes, 26 de julio de 2013 5:48
  • Lo que hice Leandro fue en el controlador fue lo siguiente:

    private _db as New DatosEntities

    Return View(_dt.TblInv.ToList())

    donde "DatosEntities" es el nombre de la entidad y "TvlInv" es el nombre de la table. Pero me da el siguiente error:

    "The underlying provider failed on Open."

    La cadena de conexion, deje que la crear en forma automatica cuando cree las entidades y esta en el archvivo web.config y asi la creo:

    <Addname="DatosEntities"connectionString="metadata=res://*/Datos.csdl|res://*/Datos.ssdl|res://*/Datos.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=98.194.25.149;initial catalog=eps_bargain;persist security info=True;user id=sa;multipleactiveresultsets=True;App=EntityFramework&quot;"providerName="System.Data.EntityClient"/>

    Interpreto que no abre esa conexion, pero en el test al crearlo si lo hizo, como podria probar esto?

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:40
    viernes, 26 de julio de 2013 16:40
  • La conexion por defecto que trae el web.config es un tanto diferente:

    <addname="DefaultConnection"connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-MvcInv-20130725061958;Integrated Security=SSPI"providerName="System.Data.SqlClient"/>

    pero si cambio estos datos por los mios, no me conviene colocar alli el "user name" y la "clave" de la BD, quedaria expuesto 

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:40
    viernes, 26 de julio de 2013 16:43
  • Ya pude solucionar el error anterior, me faltaban las librerias System.Data.Lync y System.Data.Entity

    Ahora en la vista, coloqué el siguiente codigo para el combo

    @Html.DropDownList("cboCamiones")                           

    pero me da el siguiente error:

    "There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'cboCamiones'."

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:40
    viernes, 26 de julio de 2013 20:42
  • Yo quiero utilizer Database First, eso no tengo dudas.

    Ahora desde el controlador hago lo siguiente:

    dim _dt as new DatosEntities()

    dim makeList = New SelectList(_dt.TblInvs.ToList(), ""InvId")

    ViewData("List") = makeList

    Y en la lista asi:

    @Html.DropDownList("cboCamiones", New SelectList(ViewData("List")))

    pero en lugar de desplegarme los id, me despliega en su lugar: System.Web.Mvc.SelectListitem como tanta cantidad existen de registros.

    He buscado la forma de desplegar correctamente pero no doy con la tecla.

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:41
    sábado, 27 de julio de 2013 13:09

  • has un foreach al select

    algo como esto aproximadamente

    <select >

    @foreach (var c in ViewData("List") as List<EntidadCamiones_Result>)

    {

    <option value="@c.IdCamion" >@c.NombreCamion</option>

    }

    </select>

    si importaste como funcion un procedimiento almacenado al EF , este te creara una entidad automaticamente.

    Si usas linq , puedes asignar los valores a una entidad hecha manualmente.

    Saludos

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:41
    sábado, 27 de julio de 2013 15:50
  • Utilize un modelo ".edmx" para almacenar las Tablas.

    En el controlador las leo asi:

    dim _dt as new DatosEntities()

    dim makeList = New SelectList(_dt.TblInvs.ToList(), ""InvId")

    y lo paso a la lista asi: ViewData("List") = makeList

    Return View()

    No entiendo si esta leyendo mal o desplegando mal

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:41
    sábado, 27 de julio de 2013 16:18
  • hola

    solo usa

    dim _dt as new DatosEntities()
    dim makeList = New SelectList(_dt.TblInvs.ToList(), "InvId")
    ViewData("List") = makeList

    y luego en la vista

    @Html.DropDownList("List")

    el nombre que usas en el ViewData debe coincidir con el que defines en el DropDownList y no necesitas volver a convertir

    How to create a DropDownList with ASP.NET MVC

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    • Editado Leandro TuttiniMVP sábado, 27 de julio de 2013 17:59 ....
    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:41
    sábado, 27 de julio de 2013 17:59
  • Al fin funciono. Solo arregle esta linea para que tomara el valor, texto e item seleccionado:

    dim makeList = New SelectList(_dt.TblInvs.ToList(), "InvId", "InvCam", 0)

    a seguir avanzando... Gracias !!!

    sábado, 27 de julio de 2013 19:30
  • A la consulta anterior le he agreagdo esta linea de codigo previamente y me funciona perfecto:

    Dim a AsIQueryable(OfTblInv) = Fromar In_dt.TblInvs OrderBy(ar.InvCam) Select(ar)

    Pero debo agregar la instruccion "Distinct" (pues el campo InvCam se repite) y no encuentro donde. He probado de varias formas y no doy donde.

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:41
    sábado, 27 de julio de 2013 21:40
  • hola

    Dim a AsIQueryable(Of TblInv) = (From ar In_dt.TblInvs OrderBy ar.InvCam Select ar).Distinct()

    igual recuerda que para que Distinct quizas debas implementar en la entidad alguna interfaz como IEquatable

    [Linq] Distinct y GroupBy usando IEquatable<>

    quizas debas crear alguna clase Partial para poder extender al la entidad TblInv ya que directo en el codigo generado por el edmx no vas a poder

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:41
    domingo, 28 de julio de 2013 6:29
  • Si Leandro, pienso lo mejor es implementar una clase parcial y usar IEqueatable.

    Ahora la idea seraia enviar la lista ya cargada ("a" en el ejemplo anterior) eliminar los duplicados y devolverla ?

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:41
    lunes, 29 de julio de 2013 17:01
  • Para pasar de la vista al controlador coloco el siguiente codigo en el controlador:

    Public Function LisUsu(byval model as RegisterModel) as ActionResut

    dim _dt as new GeneralEntities()

    Return View(_dt.TblUsuarios.ToList)

    En Function

    En base a esto, creo la View tipiada y crea la lista y entiendo debe recibir los datos del tipo @ModelType IEnumerable(of MvcTheKnife.RegisterModel)

    Ahora el error que me da dice que estoy enviando una lista generic y espera recibir una lista tipo IEnumerable.

    Como puedo vertir esto, o donde puede estar mi error ?

    • Marcado como respuesta eduepa lunes, 12 de agosto de 2013 15:41
    sábado, 10 de agosto de 2013 15:01