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 :

IEnumerable <T> coté controller Vide


Sujet :

ASP.NET MVC

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 279
    Par défaut IEnumerable <T> coté controller Vide
    Bonjour à tous,

    Je souhaite faire des essais sur la récupération de valeur entre la vue et le controller.

    Mon test est simple.

    J'affiche via mon EDMX des données dans ma vue, un bouton édit qui me permet de modifier directement dans ma vue Index et un bouton Save qui me permet de sauvegarder mes modification.

    Hors lorsque que je clique sur mon bouton Save, le paramètre de mon POST est null.

    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
    <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MvcApplication2.Personne>>" %>
     
    <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
        Index
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
        <%--<% using (Html.BeginForm()) {%>--%>
        <h2>
            Index</h2>
        <script  language="javascript">
            function Edit() {
                document.getElementById("Name").innerHTML ="";
                var c, c2, ch1, ch2;
     
                c = document.getElementById("Name");
                c2 = c.getElementsByTagName("input");
                ch1 = document.createElement('input');
                ch1.setAttribute("type", "text");
                ch1.setAttribute("value", "tintintintint");
                c.appendChild(ch1);
            }
        </script>
        <table>
            <tr>
                <th>Id_dossier</th>
                <th>Utilisateur</th>
                <th>Mot de passe</th>
            </tr>
            <% foreach (var item in Model)
               { %>
           <% using (Html.BeginForm())
              {%>
              <%: Html.ValidationSummary(true) %>
     
            <tr>
                <td>
                    <%: item.id_Personne%>
     
                </td>
                <td id="Name">
                    <%: item.Nom%>
                </td>
                <td>
                    <%: item.Prénom%>
                </td>
                <td>
                    <input type="button" name="Editer" value="Editer" onclick="Edit();" />
                </td>
                <td>
                    <input type="submit" value="Personne" />
                </td>
            </tr>
            <% }
               } %>
         </table>  
     
        <%-- <% } %>--%>
     
     
    </asp:Content>
    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
    public class PersonneController : Controller
        {
            private DatabaseEntities Model = new DatabaseEntities();
    
            [HttpGet]
            public ActionResult Index()
            {
                PersonneModels objPer = new PersonneModels();
    
                IEnumerable<Personne> P = objPer.GetPersonne();
    
                return View(P);
            }
    
             [HttpPost]
    //Paramètre null p
            public void Index(IEnumerable <Personne> p)
            {
                PersonneModels obj = new PersonneModels();
    
    
                obj.SetPersonne(p);
            }
    
        }
    Merci pour votre aide

  2. #2
    CUCARACHA
    Invité(e)
    Par défaut
    Salut,

    C'est normal que ça ne fonctionne pas.

    Tu dois utiliser un EditorTemplate, c'est le seul moyen pour que ta collection soit retournée en une fois.

    Dasn le modèle monModele
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public IEnumerable<maclasse> mesElements {get;set;}
    Dans les vues, sous Shared, tu dois créer un dossier EditorTemplates
    Attention, le s à la fin est important.

    Dans ce dossier tu crées une vue partielle que tu nommes EXACTEMENT comme ta classe, ici maclasse.cshtml

    Si tu veux mettre tes éléments dans une table, la vue maclasse.cshtml doit être construite comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    @model [enFonctionDeTesNameSpaces].maclasse
    <tr>
    <td>
    champ1
    </td>
    <td>
    champ2
    </td>
    <td>
    champ3
    </td>
    </tr>
    Dans ta vue principale tu utilises l'Editor Template comme suit:
    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
     
    <table>
    <tr>
    <td>
    titre champ 1
    </td>
    <td>
    titre champ 2
    </td>
    <td>
    titre champ 3
    </td>
    </tr>
    @Html.EditorFor(m => m.mesElements)
    </table>
    Dans le controlleur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [HttpPost]
    //Paramètre p ne sera plus null
            public void Index(IEnumerable <Personne> p)
    Bien à toi

    Laurent

  3. #3
    CUCARACHA
    Invité(e)
    Par défaut
    Re,

    Je n'ai pas oublié le foreach il ne faut pas en mettre.

    ++

    Laurent

Discussions similaires

  1. [AC-2007] Test controle vide sur sous formulaire continu
    Par pierrequimousse dans le forum VBA Access
    Réponses: 2
    Dernier message: 26/02/2010, 08h18
  2. controle vide quand sélectionné.
    Par maa dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 28/01/2010, 20h18
  3. Controles Champs vide et focus
    Par hugo69 dans le forum Access
    Réponses: 4
    Dernier message: 19/01/2007, 20h28
  4. Test de controle champ vide
    Par jevany dans le forum Access
    Réponses: 14
    Dernier message: 27/05/2006, 17h34
  5. Ligne vide dans control zone de liste
    Par sunvialley dans le forum Access
    Réponses: 13
    Dernier message: 10/05/2006, 17h26

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