2009-05-17 8 views
0

J'essaye d'envoyer la valeur id afin de relier 2 pages. La page de recherche avec la page de commentaires.asp.net mobile 2.0

Ceci est l'erreur que je reçois:

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code 

    Exception Details:System.NullReferenceException :Object reference not set to an instance of an object 

    Source Error: 

    Line 101: 
    Line 102:  ListComment.DataSource = comm; 
    Line 103:  ListComment.DataBind(); 
    Line 104: 
    Line 105: } 

Voici mon code pour la page de commentaires:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Comment.aspx.cs" Inherits="Comment" Debug="true"%> 
<%@ Register TagPrefix="mobile" Namespace="System.Web.UI.MobileControls" Assembly="System.Web.Mobile"%> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<body> 
    <mobile:Form id="Form1" runat="server" BackColor="#fcf9f3" Paginate="True"> 

     <mobile:Label ID="CommentError" Runat="server" ForeColor="red" 
      Font-Size="Small" Font-Bold="True" Visible="false" /> 

     <mobile:Label ID="Label2" Runat="server" ForeColor="#d3af63" Font-Italic="True" 
      Font-Name="Monotype Covasia" Font-Bold="True" text="Write Comments" /> 
     <mobile:Label ID="lblCommentTitle" Runat="server" text="Title" /> 
     <mobile:TextBox ID="txtCommentTitle" Runat="server" text="" /> 
     <br /> 

     <mobile:Label ID="lblCommentText" Runat="server" text="Comment" /> 
     <mobile:TextBox ID="txtCommentText" Runat="server" text=""/> 

     <br /> 
     <mobile:Command ID="submit" Runat="server" text="Submit" OnClick="submitform_Click" /> 
     <br /> 

     <mobile:Label ID="Label1" Runat="server" ForeColor="#d3af63" Font-Italic="True" 
      Font-Name="Monotype Covasia" Font-Bold="True" text="Read Comments"/> 
     <mobile:list runat="server" id="ListComment" DataTextfield="comment_text" 
      DataValueField="comment_text" Font-Size="Small" Font-Italic="True" 
      ItemsPerPage="5" Wrapping="Wrap" BreakAfter="True"/> 

    </mobile:Form> 
</body> 
</html> 


using System; 
using System.Collections; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Web; 
using System.Web.Mobile; 
using System.Web.SessionState; 
using System.Web.UI; 
using System.Web.UI.MobileControls; 
using System.Data.Linq; 
using System.Xml.Linq; 
using System.Linq; 

public partial class Comment : System.Web.UI.MobileControls.MobilePage 
{ 
    CommentDataContext Comments = new CommentDataContext(); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Session["error_msg"] != null) 
     { 
      CommentError.Text = Session["error_msg"].ToString(); 
      Session["error_msg"] = null; 
      CommentError.Visible = true; 
     } 

     if (Session["r_id"] != null) 
     { 
      String r_id = Session["r_id"].ToString(); 

     }  

     GetComment(); 
    } 

    protected void submitform_Click(object sender, EventArgs e) 
    { 
     if (Page.IsValid) 
     { 
      AddComment(); 
     } 
    } 


    #region Inserting a comment 
    protected void AddComment() 
    { 
     mobile_comment mobilecon = new mobile_comment(); 
     mobilecon.comment_text = txtCommentText.Text; 
     mobilecon.comment_title = txtCommentTitle.Text; 

     Comments.mobile_comments.InsertOnSubmit(mobilecon); 
     Comments.SubmitChanges(); 

     Session["error_msg"] = "Your comment has been added"; 
     Response.Redirect("Comment.aspx"); 
    } 
    #endregion 


    protected void GetComment() 
    { 
     var comm = from c in Comments.mobile_comments 
        where c.r_id == Int32.Parse(Session["r_id"].ToString()) 
        //where c.r_id == Int32.Parse(Request["r_id"].ToString()) 
        select c; 

     ListComment.DataSource = comm; 
     ListComment.DataBind(); 

    } 
} 

Suis-je utiliser cette déclaration correctement où c.r_id == Int32.Parse (Session ["r_id"]. ToString())

Sinon, comment lier les ID?

Répondre

0

Je ne sais pas si cela est votre problème, mais ce code ...

if (Session["r_id"] != null)   
{    
    String r_id = Session["r_id"].ToString(); 
} 

ne fait rien parce que vous déclarez R_ID dans le cadre du bloc et si rien faire avec elle. Ainsi, vous n'avez pas assuré avec succès que Session ["r_id"] n'est pas NULL lorsque vous le parcourez avec votre instruction LINQ. Vouliez-vous transmettre r_id à GetComment pour comparer avec c.r_id au lieu de revenir à la session?

0

d'abord, essayez d'appeler la méthode déplacer getComment dans

... 
if (Session["r_id"] != null) 
    { 
     String r_id = Session["r_id"].ToString(); 
     int id = int.Parse(r_id); 
     GetComment(id); 
    } 
... 
    protected void GetComment(int id) 
{ 
    var comm = from c in Comments.mobile_comments 
       where c.r_id == id 
       select c; 

    ListComment.DataSource = comm; 
    ListComment.DataBind(); 

} 

Lorsque vous passez paramètre de formulaire web dans l'URL, comme monsite/Comments.aspx? R_ID = 18 vous devez utiliser la requête [ "R_ID" ] objet. About Request object, MSDN Mais lorsque vous définissez submit ou une autre action utilisateur Session ["r_id"] = 18, vous devez utiliser Session ["r_id"] pour obtenir de la valeur. About Session.