Asp.net MVC Remplacer TextBox par DropDownList dans une view

Fermé
Melancolie2010_2015 Messages postés 24 Date d'inscription jeudi 18 mars 2021 Statut Membre Dernière intervention 3 mars 2022 - 3 mars 2022 à 08:54
Melancolie2010_2015 Messages postés 24 Date d'inscription jeudi 18 mars 2021 Statut Membre Dernière intervention 3 mars 2022 - 3 mars 2022 à 13:09
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
A voir également:

1 réponse

Melancolie2010_2015 Messages postés 24 Date d'inscription jeudi 18 mars 2021 Statut Membre Dernière intervention 3 mars 2022 1
3 mars 2022 à 13:09
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