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 :

Retourner un beginform qui contient une r�f�rence � un deuxieme model.


Sujet :

ASP.NET MVC

  1. #1
    Membre r�gulier
    Homme Profil pro
    D�veloppeur .NET
    Inscrit en
    Octobre 2015
    Messages
    6
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur .NET
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Par d�faut Retourner un beginform qui contient une r�f�rence � un deuxieme model.
    Bonjour, j'ai un souci avec le retour d'un beginform (dans ma vue create).

    Je code un site "type blog" et je souhaite cr�er cot� back end une view createArticle. Seulement, mon article (qui correspond � une table Article dans ma base SQL) a dans ces variables, un r�f�rence (int : id) � un autre model qui est "Categorie" (�galement une autre table dans ma base de donn�es)

    la forme de mon formulaire :

    -Titre : champ varchar
    -Corp_article : champ text
    -signature : champ varchar

    -categorie : champ r�f�rence � la table "Categories" (un select list)

    Mon code si �a aide :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    [HttpGet]
            public ActionResult CreateArticle()
            {
                using (EFRepository rep = new EFRepository())
                {
                    List<SelectListItem> items = new List<SelectListItem>();
     
                    var listeCateg = rep.GetListeCategories();
     
                    foreach (var c in listeCateg)
                    {
                        SelectListItem itm = new SelectListItem();
                        itm.Text = c.nom;
                        itm.Value = c.id.ToString();
                        items.Add(itm);
                    }
     
                    ViewBag.Categories = items;
                    return View();
                }
            }
     
            [HttpPost]
            [ActionName("CreateArticle")]
            public ActionResult CreateArticlePost(Article art)
            {
                using (EFRepository rep = new EFRepository())
                {
     
                    rep.CreateArticle(art);
     
                    return View("Index");
                }
            }
    View CreateArticle :

    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
     
    @model Microsouffle.Models.EF.Article
     
    @{
        ViewBag.Title = "CreateArticle";
    }
     
    <h2>CreateArticle</h2>
     
    @using (Html.BeginForm("CreateArticle", "Home", FormMethod.Post, new { @class = "art" }))
    {
        @Html.AntiForgeryToken()
     
        <div class="form-horizontal">
            <h4>Article</h4>
            <hr />
            @Html.ValidationSummary(true, "", new { @class = "text-danger" })
            <div class="form-group">
                @Html.LabelFor(model => model.titre, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.titre, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.titre, "", new { @class = "text-danger" })
                </div>
            </div>
     
            <div class="form-group">
                @Html.LabelFor(model => model.corp_article, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.corp_article, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.corp_article, "", new { @class = "text-danger" })
                </div>
            </div>
     
            <div class="form-group">
                @Html.LabelFor(model => model.signature, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.signature, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.signature, "", new { @class = "text-danger" })
                </div>
            </div>
     
             @* -------------------- Partie categirie --------------------------------- *@
            <div class="form-group">
                @Html.LabelFor(model => model.Category.nom, "Categorie", htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.DropDownList("Categories")
                    @*@Html.EditorFor(model => model.Category.nom, new { htmlAttributes = new { @class = "form-control" } })*@
                    @Html.ValidationMessageFor(model => model.Category, "", new { @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>
    }
     
    <div>
        @Html.ActionLink("Back to List", "Index")
    </div>
    Model :

    Article :

    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
     
     public partial class Article
        {
            public Article()
            {
                this.Commentaires = new HashSet<Commentaire>();
            }
     
            public int id { get; set; }
            public System.DateTime date_publi { get; set; }
            public System.DateTime date_dermodif { get; set; }
            public string titre { get; set; }
            public string corp_article { get; set; }
            public string signature { get; set; }
     
            public virtual ICollection<Commentaire> Commentaires { get; set; }
            public virtual Category Category { get; set; }
        }
    Categorie :

    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
     
    public partial class Category
        {
            public Category()
            {
                this.Articles = new HashSet<Article>();
            }
     
            public int id { get; set; }
            public string nom { get; set; }
            public string description { get; set; }
            public Nullable<System.DateTime> date_crea { get; set; }
            public Nullable<System.DateTime> date_modif { get; set; }
     
            public virtual ICollection<Article> Articles { get; set; }
        }
    Mon but est de passer a mon controller CreateArticle un model Article qui comporte la r�f�rence � la cat�gorie choisi.

    Merci par avance.

    Antoine

  2. #2
    Membre confirm�
    Homme Profil pro
    D�veloppeur .NET
    Inscrit en
    Juin 2013
    Messages
    29
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur .NET

    Informations forums :
    Inscription : Juin 2013
    Messages : 29
    Par d�faut
    Bonsoir,

    Il faudrait que dans ton article que tu ajoute une propri�t� pour recevoir l'id de ta cat�gorie que tu s�lectionnes.
    Ensuite pour r�cup�rer ta cat�gorie, il te faut une variable priv� category qui te permettrais de charger une cat�gorie.
    Si elle est �gale null et que l'id de la cat�gorie est diff�rent de 0, tu charge la categorie.

    Code C# : 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 partial class Article
        {
            /*...*/
     
            public int category_id { get; set; }
            private Category category;
            public Category Category { 
            get
            {
                    if(category == null) { }// Est null donc charge la category
                    return category;
            } 
            set; 
            }
        }

    Il faudra aussi que la liste est pour nom le champs category_id pour le model binding.

Discussions similaires

  1. R�ponses: 1
    Dernier message: 03/02/2010, 15h54
  2. Cr�er une feuille qui contient une seule page seulement
    Par k-eisti dans le forum Macros et VBA Excel
    R�ponses: 1
    Dernier message: 14/05/2007, 17h38
  3. R�ponses: 1
    Dernier message: 23/08/2006, 13h52
  4. suppression dans une table qui contient une cl� etrang�re
    Par zana74 dans le forum D�cisions SGBD
    R�ponses: 13
    Dernier message: 08/08/2006, 10h58
  5. [VS2005][C#] S�lection Item qui contient une string
    Par olivier_23 dans le forum Windows Forms
    R�ponses: 10
    Dernier message: 26/07/2006, 10h56

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