IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET MVC Discussion :

Soucis relation tables + controller/view


Sujet :

ASP.NET MVC

Vue hybride

Curator Soucis relation tables +... 10/03/2013, 15h48
Curator Après avoir encore fouillé le... 10/03/2013, 21h35
Curator J'ai ajouté un controller,... 12/03/2013, 21h49
Curator J'ai ajouté une vue : ... 12/03/2013, 22h31
meziantou Le message d'erreur est... 12/03/2013, 22h38
Curator Effectivement; du coup j'ai... 15/03/2013, 22h38
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Responsable Achats
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable Achats
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Par défaut Soucis relation tables + controller/view
    Bonjour,

    Je débute en ASP.NET et MVC; je me lance dans un "programme" de gestion produits et fiches techniques associées

    Une table "catalogue_produit" contenant des informations sur le produit et ensuite une table "catalogue_fichetechnique" contenant les informations fiche technique se rapportant au produit PdtID.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
        public class catalogue_produit
        {
            [Key]
            public int PdtID { get; set; }
     
            public string PdtCode { get; set; }
            public string PdtNomCourt { get; set; }
            public string PdtNomLong { get; set; }
            public string PdtTexte { get; set; }
            public int PdtColisage { get; set; }
            public string PdtGencod { get; set; }
            public float PdtTva { get; set; }
            public float PdtTgap { get; set; }
            public string PdtRemplacerPar { get; set; }
            public bool PdtActif { get; set; }
            public bool PdtPau { get; set; }
     
            [Required]
            public int FournisseurID { get; set; }
            [ForeignKey("FournisseurID")]
                public virtual catalogue_fournisseur catalogue_fournisseur { get; set; }
     
            [Required]
            public int FamilleID { get; set; }
            [ForeignKey("FamilleID")]
                public virtual catalogue_famille catalogue_famille { get; set; }
     
            [Required]
            public int CategorieID { get; set; }
            [ForeignKey("CategorieID")]
                public virtual catalogue_categorie catalogue_categorie { get; set; }
     
     
            public virtual ICollection<catalogue_fichetechnique> Catalogue_FichesTechniques { get; set; }
     
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        public class catalogue_fichetechnique
        {
            [Key]
            public int FtID { get; set; }
     
            [Required]
            public int PdtID { get; set; }
     
            public string FtUrl { get; set; }
            public DateTime FtDate { get; set; }
     
            public virtual catalogue_produit catalogue_produit { get; set; }
        }
    En fait je coince lors de la création de mon controller + view. Je souhaiterai, lors de la création d'un produit, avoir un champ disponible pour ajouter une fiche technique (plus tard par popup). Là, à chaque création, je n'ai que les champs de la table catalogue_produit qui apparaissent et je dois créer un controller+view séparé pour les fiches techniques.

    Merci d'avance, désolé si je ne suis pas très clair, j'ai commencé il y a peu en "auto-didacte".

  2. #2
    Membre du Club
    Homme Profil pro
    Responsable Achats
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable Achats
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Par défaut
    Après avoir encore fouillé le web, je devrais me diriger vers un ViewModel personnalisé.

    Après avoir essayé le code ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     public class ProduitViewModel
        {
            public catalogue_produit CATPRODUIT { get; set; }
            public catalogue_fichetechnique CATFT { get; set; }
        }
    Je ne sais pas si c'est correct et donc je galère a créer un controller correct derrière

    Preneur de toute aide ou complément !

  3. #3
    Membre du Club
    Homme Profil pro
    Responsable Achats
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable Achats
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Par défaut
    J'ai ajouté un controller, mais étant débutant, je ne suis pas sûr du tout de ce que je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     public class ProduitController : Controller
        {
            //
            // GET: /Produit/
            public ActionResult Index()
            {
                ProduitViewModel product = new ProduitViewModel();
                return View(product);
            }
     
        }
    Est-ce que quelqu'un aurait l'ambilité de confirmer ou bien me dire si je me dirige vers une impasse ?

  4. #4
    Membre du Club
    Homme Profil pro
    Responsable Achats
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable Achats
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Par défaut
    J'ai ajouté une vue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    @model IEnumerable<WEBPHSMVC.ViewModels.ProduitViewModel>
     
    @{
        ViewBag.Title = "Index";
    }
     
    <h2>Index</h2>
     
    <p>
        @Html.ActionLink("Create New", "Create")
    </p>
    <table>
        <tr>
            <th>
                PdtCode
            </th>
            <th>
                PdtNomCourt
            </th>
            <th>
                PdtNomLong
            </th>
     
            <th>
                PdtColisage
            </th>
            <th>
                FTURL
            </th>
            <th>
                FTDATE
            </th>
     
        </tr>
     
    @foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.CATPRODUIT.PdtCode)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.CATPRODUIT.PdtNomCourt)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.CATPRODUIT.PdtNomLong)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.CATPRODUIT.PdtColisage)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.CATFT.FtUrl)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.CATFT.FtDate)
            </td>
     
     
            <td>
                @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
                @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
                @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
            </td>
        </tr>
    }
     
    </table>
    Mais j'ai le message d'erreur suivant : (pièce jointe pour impression écran)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    Erreur du serveur dans l'application '/'.
    --------------------------------------------------------------------------------
     
     
     L'élément de modèle passé dans le dictionnaire est de type 'WEBPHSMVC.ViewModels.ProduitViewModel', mais ce dictionnaire requiert un élément de modèle de type 'System.Collections.Generic.IEnumerable`1[WEBPHSMVC.ViewModels.ProduitViewModel]'. 
    Description : Une exception non gérée s'est produite au moment de l'exécution de la requête Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code. 
     
    Détails de l'exception: System.InvalidOperationException: L'élément de modèle passé dans le dictionnaire est de type 'WEBPHSMVC.ViewModels.ProduitViewModel', mais ce dictionnaire requiert un élément de modèle de type 'System.Collections.Generic.IEnumerable`1[WEBPHSMVC.ViewModels.ProduitViewModel]'.
     
    Erreur source: 
     
     
     
     
    Une exception non gérée s'est produite lors de l'exécution de la requête Web actuelle. Les informations relatives à l'origine et l'emplacement de l'exception peuvent être identifiées en utilisant la trace de la pile d'exception ci-dessous.
     
     
    Trace de la pile: 
     
     
     
     
     
    [InvalidOperationException: L'élément de modèle passé dans le dictionnaire est de type 'WEBPHSMVC.ViewModels.ProduitViewModel', mais ce dictionnaire requiert un élément de modèle de type 'System.Collections.Generic.IEnumerable`1[WEBPHSMVC.ViewModels.ProduitViewModel]'.]
       System.Web.Mvc.ViewDataDictionary`1.SetModel(Object value) +509563
       System.Web.Mvc.ViewDataDictionary..ctor(ViewDataDictionary dictionary) +371
       System.Web.Mvc.WebViewPage`1.SetViewData(ViewDataDictionary viewData) +48
       System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +99
       System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +115
       System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +295
       System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13
       System.Web.Mvc.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19() +23
       System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation) +242
       System.Web.Mvc.<>c__DisplayClass1e.<InvokeActionResultWithFilters>b__1b() +21
       System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +177
       System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +324
       System.Web.Mvc.Controller.ExecuteCore() +106
       System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +91
       System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext) +10
       System.Web.Mvc.<>c__DisplayClassb.<BeginProcessRequest>b__5() +34
       System.Web.Mvc.Async.<>c__DisplayClass1.<MakeVoidDelegate>b__0() +19
       System.Web.Mvc.Async.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) +10
       System.Web.Mvc.Async.WrappedAsyncResult`1.End() +62
       System.Web.Mvc.<>c__DisplayClasse.<EndProcessRequest>b__d() +48
       System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f) +7
       System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action) +22
       System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +60
       System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
       System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9629296
       System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
    Images attachées Images attachées  

  5. #5
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : autre
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    Le message d'erreur est plutôt explicite.
    Ta vue attend IEnumerable<WEBPHSMVC.ViewModels.ProduitViewModel> alors que dans ton controller tu passes un WEBPHSMVC.ViewModels.ProduitViewModel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ProduitViewModel product = new ProduitViewModel();
    return View(product);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @model IEnumerable<WEBPHSMVC.ViewModels.ProduitViewModel>

    Il faut être cohérent.

  6. #6
    Membre du Club
    Homme Profil pro
    Responsable Achats
    Inscrit en
    Septembre 2012
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Responsable Achats
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2012
    Messages : 7
    Par défaut
    Effectivement; du coup j'ai modifié de la manière suivante :

    Models :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
        public class catalogue_produit
        {
            [Key]
            public int PdtID { get; set; }
     
            public string PdtCode { get; set; }
            public string PdtNomCourt { get; set; }
            public string PdtNomLong { get; set; }
            public string PdtTexte { get; set; }
            public int PdtColisage { get; set; }
            public string PdtGencod { get; set; }
            public float PdtTva { get; set; }
            public float PdtTgap { get; set; }
            public string PdtRemplacerPar { get; set; }
            public bool PdtActif { get; set; }
            public bool PdtPau { get; set; }
     
            [Required]
            public int FournisseurID { get; set; }
            [ForeignKey("FournisseurID")]
                public virtual catalogue_fournisseur catalogue_fournisseur { get; set; }
     
            [Required]
            public int FamilleID { get; set; }
            [ForeignKey("FamilleID")]
                public virtual catalogue_famille catalogue_famille { get; set; }
     
            [Required]
            public int CategorieID { get; set; }
            [ForeignKey("CategorieID")]
                public virtual catalogue_categorie catalogue_categorie { get; set; }
        }
     
        //Classe gérant les fiches techniques
        public class catalogue_fichetechnique
        {
            [Key]
            public int FtID { get; set; }
     
            [Required]
            public int PdtID { get; set; }
            [ForeignKey("PdtID")]
                public virtual catalogue_produit catalogue_produit { get; set; }
     
            public string FtUrl { get; set; }
            public DateTime FtDate { get; set; }
        }
    Viewmodel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        public class ProduitViewModel
        {
            public IEnumerable<catalogue_produit> Produits { get; set; }
            public IEnumerable<catalogue_fichetechnique> FichesTechniques { get; set; }
        }
    Controller :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
        public class ProduitController : Controller
        {
            public ProduitViewModel db = new ProduitViewModel();
     
            //
            // GET: /Produit/
            public ViewResult Index()
            {
                ProduitViewModel viewModel = new ProduitViewModel();
                viewModel.Produits = db.Produits;
                viewModel.FichesTechniques = db.FichesTechniques;
     
                return View(viewModel);
            }
        }
    Vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    @model WEBPHSMVC.ViewModels.ProduitViewModel
     
    @{
        ViewBag.Title = "Index";
    }
     
    <h2>Index</h2>
     
    <p>
        @Html.ActionLink("Create New", "Create")
    </p>
    <table>
        <tr>
            <th>PdtCode</th>
            <th>PdtNomCourt</th>
            <th>PdtNomLong</th>
            <th>PdtColisage</th>
        </tr>
     
    @foreach (var item in Model.Produits) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.PdtCode)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.PdtNomCourt)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.PdtNomLong)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.PdtColisage)
            </td>
     
            <td>
                @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
                @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
                @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
            </td>
        </tr>
    }
     
    </table>
    Malheureusement j'ai un autre message d'erreur; je pense que je rate encore quelquechose de basique, mais malgré mes recherches sur les différents sites et l'éxécution des tutoriels type mvcmusicstore, je n'arrive pas spécialement à mettre le doigt sur l'élément qui me manque. Ca doit être quelquechose de simple, mais le déclic ne vient pas

    Message d'erreur :
    L'exception System.NullReferenceException n'a pas été gérée par le code utilisateur
    Message=La référence d'objet n'est pas définie à une instance d'un objet.
    Source=App_Web_tsj2knq3
    StackTrace:
    à ASP._Page_Views_Produit_Index_cshtml.Execute() dans c:\Users\Cyndie\Desktop\WEBPHSMVC\WEBPHSMVC\Views\Produit\Index.cshtml:ligne 20
    à System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
    à System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
    à System.Web.WebPages.StartPage.RunPage()
    à System.Web.WebPages.StartPage.ExecutePageHierarchy()
    à System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
    à System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
    à System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
    à System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
    à System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
    à System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19()
    à System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
    InnerException:
    En fait j'ai l'impression que mes "variables restent vides, mais pourquoi ?

Discussions similaires

  1. pb relations tables + ligne d'enregistrement
    Par Ludo11 dans le forum Modélisation
    Réponses: 1
    Dernier message: 01/06/2007, 17h56
  2. create table et view
    Par harjer dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 28/04/2007, 16h08
  3. tables et Views
    Par sovop dans le forum Oracle
    Réponses: 7
    Dernier message: 14/03/2007, 11h08
  4. Réponses: 5
    Dernier message: 12/12/2005, 18h30
  5. [conception] relations tables appliquée à l'archéologie
    Par Leehan dans le forum Modélisation
    Réponses: 8
    Dernier message: 08/11/2005, 20h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo