Asp.net MVC Remplacer TextBox par DropDownList dans une view

Melancolie2010_2015 Messages postés 24 Statut Membre -  
Melancolie2010_2015 Messages postés 24 Statut Membre -
Bonjour à tous.
J'ai deux model

UtilisateurModel

Public Class Utilisateur
Public Property Id As Integer
Public Property DirectionId As Integer
Public Property Departement As String
End Class


DirectionModel

Public Class Direction
Public Property Id As Integer
Public Property Valeur As String
Public Property Supprime As Boolean
End Class


et ma vue

CreateOrEditUtilisateurView

@ModelType ANNUAIRE.Utilisateur
@Code
ViewData("Title") = "Create or Edit"
Layout = "~/Views/Shared/_Layout.vbhtml"
End Code

<h2>Create Or Edit</h2>

@Using (Html.BeginForm())
@Html.AntiForgeryToken()

@<div Class="form-horizontal">
<h4>Utilisateur</h4>
<hr />
@Html.ValidationSummary(True, "", New With {.class = "text-danger"})
@Html.HiddenFor(Function(model) model.Id)

<div class="form-group">
@Html.LabelFor(Function(model) model.DirectionId, htmlAttributes:= New With { .class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(Function(model) model.DirectionId, New With {.htmlAttributes = New With {.class = "form-control"}})
@Html.ValidationMessageFor(Function(model) model.DirectionId, "", New With {.class = "text-danger"})
</div>
</div>

<div class="form-group">
@Html.LabelFor(Function(model) model.Departement, htmlAttributes:=New With {.class = "control-label col-md-2"})
<div class="col-md-10">
@Html.EditorFor(Function(model) model.Departement, New With {.htmlAttributes = New With {.class = "form-control"}})
@Html.ValidationMessageFor(Function(model) model.Departement, "", New With { .class = "text-danger" })
</div>
</div>
</div>
End Using


Je voudrais remplacer le textbox de "DirectionId" par un dropdownlist rempli à partir du modèle "Direction"
Toutes mes recherches sont infructueuses.
Si quelqu'un a une solution ou un lien, je lui serai reconnaissant

1 réponse

  1. Melancolie2010_2015 Messages postés 24 Statut Membre 1
     
    J'ai ajouté dans la classe Utilisateur de UtilisateurModel une propriété "Direction"

    UtilisateurModel:

    Public Class Utilisateur
        Public Property Id As Integer
        Public Property DirectionId As Integer
        Public Property Departement As String
        Public Property Direction As IEnumerable(Of SelectListItem)
    End Class


    Dans la vue de Utilisateur, j'ai modifié le contrôle du champ

    <div class="form-group">
                @Html.LabelFor(Function(model) model.Direction, htmlAttributes:=New With {.class = "control-label col-md-2"})
                <div class="col-md-10">
                    @Html.DropDownListFor(Function(model) model.DirectionId, Model.Direction, New With {.htmlAttributes = New With {.class = "form-control"}})
                    @Html.ValidationMessageFor(Function(model) model.DirectionId, "", New With {.class = "text-danger"})
                </div>
            </div>


    Dans le controller, j'ai ceci

    ' GET: Utilisateurs/Create and Edit
            Function CreateEdit(ByVal id As Integer?) As ActionResult
                Dim modele = New Utilisateur With {.Direction = db.Directions.ToList().[Select](Function(x) New SelectListItem With {.Text = x.Valeur, .Value = x.Id})}
    
                If IsNothing(id) Then
                    Return View(modele)
                Else
                    If IsNothing(id) Then
                        Return New HttpStatusCodeResult(HttpStatusCode.BadRequest)
                    End If
    
                    Dim Utilisateur As Utilisateur = db.Utilisateurs.Find(id)
    
                    If IsNothing(Utilisateur) Then
                        Return HttpNotFound()
                    End If
    
                    Return View(Utilisateur, modele)
                End If
            End Function


    Ca marche quand je fait "Create". Mais quand je fait "Edit", il me met cette erreur

    System.InvalidCastException : 'Impossible d'effectuer un cast d'un objet de type 'ANNUAIRE.Utilisateur' en type 'System.Web.Mvc.IView'.'
    à cette ligne
    Return View(Utilisateur, modele)
    du controller

    Je ne vois pas ce qui est anormal
    0