none
WebMatrix DBase edit RRS feed

  • Question

  • Bonjour a tous

    je débute en WEBMATRIX et je crois ca va pas m'enchanter  ce language

    Mon probleme est toujour avec cette page pour editer les posts

    en faite il pourais etre utiliser pour les commantaire au site

    ou des post mensuel cours sur site site, j'arrive a le faire assez bien avec VWD 2010 express 

      mon probleme est le suivant

    @{  
        Layout = "~/_SiteLayout.cshtml";
        
        int id = Request["id"].AsInt();            
        
        var db = Database.Open("BlogDM");    
        
        var selectQueryString = "SELECT Title, SubmittedBy, SubmittedOn, Content from POSTS  WHERE PostID = @0";  
            
        var Post = db.QuerySingle(selectQueryString, id); 
        
         var Title=Post.Title;  
         var SubmittedBy=Post.SubmittedBy;
         var SubmittedOn=Post.SubmittedOn.ToShortDateString();
         var Content=Post.Content;  
        
        if(IsPost)
        { 
            Title=Request["Title"];    
             
            SubmittedBy=Request["SubmittedBy"];     
             
            SubmittedOn=Request["SubmittedOn"];  
             
            Content=Request.Unvalidated("Content");          
            
            var executeQueryString="UPDATE POSTS Set Title=@0, SubmittedBy=@1, SubmittedOn=@2,  Content=@3 WHERE PostId=@4"; 
           
            db.Execute(executeQueryString, Title, SubmittedBy, SubmittedOn,  Content, id); 
           
            Response.Redirect("ManagePosts.cshtml");
        }
    }
    
    <h1>Edit Blog Post</h1>
    <p>
    <form action="" method="post">
    <table>
    <tr><td>
        Title:
    </td><td>    
    <input type="text" name="Title" value="@Title" size="50"/>
    </td></tr>
    <tr><td>
        Author:
    </td><td>
    <input type="text" name="SubmittedBy" value="@SubmittedBy" size="20"/>
    </td></tr>
    <tr><td>
        Date:
    </td><td>
    <input type="text" name="SubmittedOn" value="@SubmittedOn" size="20"/>
    </td></tr>
    <tr><td>
        Content:
    </td><td>    
    <textarea name="Content" rows="10" cols="40">@Content</textarea>
    </td></tr>
    <tr><td>
    <input type="submit" value="Save Post" />
    </td><td></td></tr>
    </table>
    </form>
    </p>

       Ma base de données est comme suit

      


    Ou est l'erreur dans ce code si je recoit toujours ce message

      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: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Impossible d'effectuer une liaison au moment de l'exécution sur une référence null

    Erreur source:

    Ligne 10 :     var Post = db.QuerySingle(selectQueryString, id); 
    Ligne 11 :     
    Ligne 12 :      var Title=Post.Title;  
    Ligne 13 :      var SubmittedBy=Post.SubmittedBy;
    Ligne 14 :      var SubmittedOn=Post.SubmittedOn.ToShortDateString();

    Fichier source : c:\Documents and Settings\Daniel Morais\Mes documents\My Web Sites\BlogDM\Admin\EditPost.cshtml    Ligne : 12

    Trace de la pile:

    [RuntimeBinderException: Impossible d'effectuer une liaison au moment de l'exécution sur une référence null]
       CallSite.Target(Closure , CallSite , Object ) +124
       ASP._Page_Admin_EditPost_cshtml.Execute() in c:\Documents and Settings\Daniel Morais\Mes documents\My Web Sites\BlogDM\Admin\EditPost.cshtml:12
       System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +207
       System.Web.WebPages.WebPage.ExecutePageHierarchy(IEnumerable`1 executors) +68
       System.Web.WebPages.WebPage.ExecutePageHierarchy() +156
       System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +76
       System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal(HttpContext context) +249
    


    Informations sur la version : Version Microsoft .NET Framework :4.0.30319; Version ASP.NET :4.0.30319.1

    Erreur du serveur dans l'application '/'.

    Impossible d'effectuer une liaison au moment de l'exécution sur une référence null

     

    c'est la seule page qui me cause des problemes

    KKun a une ide la dessus.

     

    Merci


    BigDan
    lundi 26 septembre 2011 17:11

Réponses

  • Salut a tous

    je suis parvenue a modifier mon code de facon a regle se foutu probleme que j'avis

     mon ManagePosts.schtml a changer comme suit

    @{
        Layout = "/_SiteLayout.cshtml"; 
        var db = Database.Open("BlogDM");
        var selectQueryString = "Select PostID,Title,SubmittedBy,SubmittedOn From Posts"; 
        var grid = new WebGrid(db.Query(selectQueryString)); 
    } 
    
    @grid.GetHtml(
            columns: grid.Columns(
            grid.Column(  
                header:"",  
                format:@<text><a href="@Href("~/Admin/EditPost",@item.PostID)">Edit</a></text>),  
            J'ai aussi modifier la ligne si-dessus pour permettre la connection par l'ID.     
            grid.Column(
                columnName : "Title"), 
            grid.Column(
                columnName : "SubmittedBy", 
                header: "Author"),
            grid.Column( 
                columnName : "SubmittedOn",
                header: "Date",
                format: @<text>@item.SubmittedOn.ToShortDateString()</text>)
        ) 
    )   
    <a href="AddPost.cshtml">Add a new post</a>

    puis mon EditPost.schtml a changer comme suit

    @{  
        Layout = "~/_SiteLayout.cshtml";    
        
       // int id=Request["id"].AsInt();  j'ai changer cette ligne 
        var sql="Select Title,SubmittedBy,SubmittedOn,Content From Posts WHERE PostID=@0";   
        var db=Database.Open("BlogDM");  
        
         var ProductId  = UrlData[0];  Pour celle-ci 
        
        var Post=db.QuerySingle(sql, ProductId);
        
        var Title=Post.Title;
        var SubmittedBy=Post.SubmittedBy;
        var SubmittedOn=Post.SubmittedOn.ToShortDateString(); 
        var Content=Post.Content; 
        
        if(IsPost)
        {   
            Title=Request["Title"];
            SubmittedBy=Request["SubmittedBy"];
            SubmittedOn=Request["SubmittedOn"]; 
            Content=Request.Unvalidated("Content"); 
           
            sql="UPDATE Posts Set Title=@0, SubmittedBy=@1, SubmittedOn=@2,  Content=@3  WHERE PostId=@4";
            db.Execute(sql, Title, SubmittedBy, SubmittedOn, Content, ProductId);
            Response.Redirect("~/Admin/ManagePosts.cshtml");  Liens modifier
        }
    }


    et ca fonctionne en faisant attention de modifier mes lien de retour avec le repertoires


    Merci a tous pour avoir essayer de m'aider


    BigDan
    • Marqué comme réponse DanielMorais dimanche 2 octobre 2011 22:15
    dimanche 2 octobre 2011 22:14

Toutes les réponses

  • Bonjour,

    Ce problème vient du fait que QuerySingle() vous retourne aucune ligne. Avez-vous des données dans votre base de données ? Avez-vous vérifiquer le l'ID utilisé dans la requête existe bien dans la base de données.

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    lundi 26 septembre 2011 18:36
    Modérateur
  • Bonjour ou bonsoir Gilles

    Merci pour ton intervention

    Y a des données deja entrée dans la base 

    Ok Y'a une une ligne de données mais ils sont la. 

    mais au cas ou je verifie les données et l'ID

    Merci


    BigDan
    lundi 26 septembre 2011 21:39
  • Bonjour ou bonsoir Gilles

    Merci pour ton intervention

    Y a des données deja entrée dans la base 

    Ok Y'a une une ligne de données mais ils sont la. 

    mais au cas ou je verifie les données et l'ID

    Merci


    BigDan


    Bon j'Ai verifier tous mes ligne et rien ne fonctionne je trouve pas d'ou vien cette ereur La je suis encore plus perdu j'ai meme essayer de trouver des equivalent et je recoit la meme erreur

    pour la lire pas de trouble

    pour ajouter ca fonctionne

    pour editer (Update) la,  gros probleme

    Merci

     


    BigDan
    lundi 26 septembre 2011 22:47
  • Bonjour,

    A l'execution, essayez d'afficher la valeur de la variable id

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    mardi 27 septembre 2011 06:49
    Modérateur
  • J'ai regler le probleme en retiran cette comm a la fin de select

     WHERE PostID = @0

    maintenant la page s'affiche et lis les données.

    mais update ne fonctionne pas

    la commande est la suivante

    @{  
    
        Layout = "~/_SiteLayout.cshtml";   
    
        
    
        int id = Request["PostID"].AsInt();     
    
        var db = Database.Open("BlogDM");     
    
        var selectQueryString = "SELECT  Title, SubmittedBy, SubmittedOn, Content from Posts";          
    
        var Post = db.QuerySingle(selectQueryString, id);         
    
        var Title=Post.Title;  
    
        var SubmittedBy=Post.SubmittedBy;
    
        var SubmittedOn=Post.SubmittedOn.ToShortDateString();
    
        var Content=Post.Content;   
    
        
    
        if(IsPost)
    
        {  
    
            Title=Request["Title"];             
    
            SubmittedBy=Request["SubmittedBy"];  
    
            SubmittedOn=Request["SubmittedOn"];  
    
            Content=Request["Content"];  
    
            var executeQueryString="UPDATE Posts Set Title=@0, SubmittedBy=@1, SubmittedOn=@2, Content=@3 WHERE PostID=@4"; 
    
            db.Execute(executeQueryString, Title, SubmittedBy, SubmittedOn, Content, id); 
    
           
    
            Response.Redirect("ManagePosts.cshtml");
    
        } 
    
    }

    c'est lorsque je clique la commande save post que ispost doit reagir

    il me redirige vers  ManagePost mais n'enregistre pas les modif

    et mon managePost est le suivant

    @{
    
        Layout = "/_SiteLayout.cshtml";
    
        var db = Database.Open("BlogDM");
    
        var selectQueryString = "Select PostID, Title,  SubmittedBy, SubmittedOn From Posts"; 
    
        var grid = new WebGrid(db.Query(selectQueryString));
    
    } 
    
    @grid.GetHtml(
    
            columns: grid.Columns(
    
            grid.Column(  
    
                header:"",  
    
                format:@<text><a href="Edit/@item.PostID">Edit</a></text>),           
    
            grid.Column(
    
                columnName : "Title"), 
    
            grid.Column(
    
                columnName : "SubmittedBy", 
    
                header: "Author"),
    
            grid.Column( 
    
                columnName : "SubmittedOn",
    
                header: "Date",
    
                format: @<text>@item.SubmittedOn.ToShortDateString()</text>)
    
        ) 
    
    )   
    
    <p><a href="AddPost.cshtml">Add a new post</a></p>
    
    

    et la commande en gras ne fonctionne pas je recoit l'erreur de page inexistante

    remarque que si ca devien complexe je peut envoyer le code complet si tu juge utile de le voir

    Merci


    BigDan
    • Modifié DanielMorais mardi 27 septembre 2011 16:14
    • Proposé comme réponse Link.frEditor jeudi 29 septembre 2011 22:38
    • Non proposé comme réponse DanielMorais jeudi 29 septembre 2011 22:57
    mardi 27 septembre 2011 16:11
  • Bonjour,

    Je suggère de repartir du code initial. Mettre un point d'arrêt sur la ligne concernée et vérifier dans le débogueur que Post!=null. Cette erreur indique que l'on essaie d'utiliser un objet non initialisé ce qui serait le cas si la requête ne retourne rien.

    Eventuellement être plus explicite dans les réponses (par exemple style id vaut 2 et j'ai bien vérifié dans la base que j'ai une ligne avec PostID=2). Id ne serait pas sur 0 par hasard ?


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    vendredi 30 septembre 2011 12:13
    Modérateur
  • bonjour Patrice et merci pour cette intervention

    Dans ma base de données y a trois entree dont les ID sont

    1,2,3

    dans la lecture derreur je ne recoit que celle-ci et pas autre detailles

    je vais essayer ce que tu me dis mais je viens de faire plusieurs test avec d'autre code que j,ai trouver sur le net et toujour les meme erreur dans l'édit et le managePost et autre helper je recoit meme des erreur de nom fichier il essay tous d'ouvrir un fichier portant le L'ID com nom de fichier

    ce qui fait que le type d'editeur commence a m'exaspere plutot dificile a suivre pour un programme supposer simple et facile.

    Merci


    BigDan
    vendredi 30 septembre 2011 16:40
  • Salut a tous

    je suis parvenue a modifier mon code de facon a regle se foutu probleme que j'avis

     mon ManagePosts.schtml a changer comme suit

    @{
        Layout = "/_SiteLayout.cshtml"; 
        var db = Database.Open("BlogDM");
        var selectQueryString = "Select PostID,Title,SubmittedBy,SubmittedOn From Posts"; 
        var grid = new WebGrid(db.Query(selectQueryString)); 
    } 
    
    @grid.GetHtml(
            columns: grid.Columns(
            grid.Column(  
                header:"",  
                format:@<text><a href="@Href("~/Admin/EditPost",@item.PostID)">Edit</a></text>),  
            J'ai aussi modifier la ligne si-dessus pour permettre la connection par l'ID.     
            grid.Column(
                columnName : "Title"), 
            grid.Column(
                columnName : "SubmittedBy", 
                header: "Author"),
            grid.Column( 
                columnName : "SubmittedOn",
                header: "Date",
                format: @<text>@item.SubmittedOn.ToShortDateString()</text>)
        ) 
    )   
    <a href="AddPost.cshtml">Add a new post</a>

    puis mon EditPost.schtml a changer comme suit

    @{  
        Layout = "~/_SiteLayout.cshtml";    
        
       // int id=Request["id"].AsInt();  j'ai changer cette ligne 
        var sql="Select Title,SubmittedBy,SubmittedOn,Content From Posts WHERE PostID=@0";   
        var db=Database.Open("BlogDM");  
        
         var ProductId  = UrlData[0];  Pour celle-ci 
        
        var Post=db.QuerySingle(sql, ProductId);
        
        var Title=Post.Title;
        var SubmittedBy=Post.SubmittedBy;
        var SubmittedOn=Post.SubmittedOn.ToShortDateString(); 
        var Content=Post.Content; 
        
        if(IsPost)
        {   
            Title=Request["Title"];
            SubmittedBy=Request["SubmittedBy"];
            SubmittedOn=Request["SubmittedOn"]; 
            Content=Request.Unvalidated("Content"); 
           
            sql="UPDATE Posts Set Title=@0, SubmittedBy=@1, SubmittedOn=@2,  Content=@3  WHERE PostId=@4";
            db.Execute(sql, Title, SubmittedBy, SubmittedOn, Content, ProductId);
            Response.Redirect("~/Admin/ManagePosts.cshtml");  Liens modifier
        }
    }


    et ca fonctionne en faisant attention de modifier mes lien de retour avec le repertoires


    Merci a tous pour avoir essayer de m'aider


    BigDan
    • Marqué comme réponse DanielMorais dimanche 2 octobre 2011 22:15
    dimanche 2 octobre 2011 22:14