2009-05-17 11 views
0

2ページを接続するために値IDを送信しようとしています。コメントページの検索ページ。asp.net mobile 2.0

これは私が取得エラーです:

<%@ 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(); 

    } 
} 

私が正しく、この文を使用しています c.r_id ==でInt32.Parse:ここ

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: } 

はコメントページのための私のコードです(Session ["r_id"]。ToString())

もしそうでなければ、どのようにidをリンクしますか?これはあなたの問題であれば

答えて

0

は、私はわかりませんが、あなたがもしブロックの範囲でR_IDを宣言し、それとの何もしないので、このコード...

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

は何もしません。したがって、Session ["r_id"]がLINQステートメントで反復処理されるときに、Session ["r_id"]がnullでないことを正常に保証していません。セッションに戻る代わりにc.r_idと比較するためにGetCommentにr_idを渡すことを意味しましたか?

0

まず、個人用サイト/ Comments.aspxのように、URLでウェブフォームからパラメータを渡すと

... 
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(); 

} 

にGETCOMMENTメソッドを呼び出して移動してみてください?R_ID = 18 あなたがリクエスト[ "R_ID" を使用する必要があります。 ]オブジェクトです。 About Request objectMSDN しかし、サブミットまたはその他のユーザーアクションSession ["r_id"] = 18に設定すると、セッション["r_id"]を使用して値を取得する必要があります。 About Session