none
Erro ao carregar View criada com base em Classe de Modelo RRS feed

  • Pergunta

  • Boa noite,

    Gerei a seguinte View com base em minha classe de modelo e meu contexto:

    @ModelType DevelopersOnLine.com.br.Usuario
    @Code
        ViewData("Title") = "CadastroUsuario"
    End Code
    
    <h2>CadastroUsuario</h2>
    
    @Using (Html.BeginForm()) 
        @Html.AntiForgeryToken()
        
        @<div class="form-horizontal">
            <h4>Usuario</h4>
            <hr />
            @Html.ValidationSummary(True, "", New With { .class = "text-danger" })
            <div class="form-group">
                @Html.LabelFor(Function(model) model.Nome, htmlAttributes:= New With { .class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(Function(model) model.Nome, New With { .htmlAttributes = New With { .class = "form-control" } })
                    @Html.ValidationMessageFor(Function(model) model.Nome, "", New With { .class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(Function(model) model.Email, htmlAttributes:= New With { .class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(Function(model) model.Email, New With { .htmlAttributes = New With { .class = "form-control" } })
                    @Html.ValidationMessageFor(Function(model) model.Email, "", New With { .class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(Function(model) model.NomeUsuario, htmlAttributes:= New With { .class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(Function(model) model.NomeUsuario, New With { .htmlAttributes = New With { .class = "form-control" } })
                    @Html.ValidationMessageFor(Function(model) model.NomeUsuario, "", New With { .class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                @Html.LabelFor(Function(model) model.Senha, htmlAttributes:= New With { .class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(Function(model) model.Senha, New With { .htmlAttributes = New With { .class = "form-control" } })
                    @Html.ValidationMessageFor(Function(model) model.Senha, "", New With { .class = "text-danger" })
                </div>
            </div>
    
            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" value="Create" class="btn btn-default" />
                </div>
            </div>
        </div>
    End Using
    
    <div>
        @Html.ActionLink("Back to List", "Index")
    </div>
    <script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script src="~/Scripts/jquery.validate.min.js"></script>
    <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
    

    Porém, a view apresenta o seguinte erro:

    The model item passed into the dictionary is of type 'System.Data.Entity.DbSet`1[DevelopersOnLine.com.br.Usuario]', but this dictionary requires a model item of type 'DevelopersOnLine.com.br.Usuario'.

    Como posso resolver este problema?

    Segue abaixo minha classe de modelo:

    Imports System.ComponentModel.DataAnnotations
    Imports System.ComponentModel.DataAnnotations.Schema
    <Table("usuario")>
    Public Class Usuario
        <Key>
        <Required>
        <Column("id_usuario")>
        Public Property Id_usuario As Integer
        <Column("nome")>
        Public Property Nome As String
        <Column("e-mail")>
        Public Property Email As String
        <Column("login")>
        Public Property NomeUsuario As String
        <Column("senha")>
        Public Property Senha As String
    
    End Class
    

    E minha classe de contexto:

    Public Class DevelopersContext
        Inherits DbContext
    
        Public Property Usuarios As DbSet(Of Usuario)
    
    End Class
    

    terça-feira, 25 de outubro de 2016 00:19

Respostas

  • Marcio,

    Na sua action você retorna uma coleção de usuários, já no código de sua view você indica o tipo de sua model como sendo DevelopersOnLine.com.br.Usuario, ou seja, apenas um objeto.

    No formulário de cadastro, ao meu ver, você nem precisa de enviar um objeto do tipo Usuario. Então tente alterando o código de sua action para apenas:

    Imports System.Web.Mvc
    
    Namespace Controllers
        Public Class CadastroUsuarioController
            Inherits Controller
    
            ' GET: CadastroUsuario
            Function CadastroUsuario() As ActionResult
                
                Return View()
            End Function
        End Class
    End Namespace


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    terça-feira, 25 de outubro de 2016 12:59

Todas as Respostas

  • Como está o código da action que renderiza esta view?

    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    terça-feira, 25 de outubro de 2016 12:19
  • Segue o código de geração da View:

    Imports System.Web.Mvc
    
    Namespace Controllers
        Public Class CadastroUsuarioController
            Inherits Controller
    
            ' GET: CadastroUsuario
            Function CadastroUsuario() As ActionResult
                Dim usuarios = New DevelopersContext().Usuarios
                Return View("CadastroUsuario", usuarios)
            End Function
        End Class
    End Namespace

    terça-feira, 25 de outubro de 2016 12:54
  • Marcio,

    Na sua action você retorna uma coleção de usuários, já no código de sua view você indica o tipo de sua model como sendo DevelopersOnLine.com.br.Usuario, ou seja, apenas um objeto.

    No formulário de cadastro, ao meu ver, você nem precisa de enviar um objeto do tipo Usuario. Então tente alterando o código de sua action para apenas:

    Imports System.Web.Mvc
    
    Namespace Controllers
        Public Class CadastroUsuarioController
            Inherits Controller
    
            ' GET: CadastroUsuario
            Function CadastroUsuario() As ActionResult
                
                Return View()
            End Function
        End Class
    End Namespace


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    terça-feira, 25 de outubro de 2016 12:59
  • Então o problema era o tipo que estava sendo passado na action do controller?
    terça-feira, 25 de outubro de 2016 13:12