asp.net mobile 2.0 - PullRequest
       13

asp.net mobile 2.0

0 голосов
/ 18 мая 2009

Я пытаюсь отправить значение id, чтобы соединить 2 страницы. Страница поиска со страницей комментариев.

Это ошибка, которую я получаю:

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

Вот мой код для страницы комментариев:

<%@ 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 (Session ["r_id"]. ToString ())

Если нет, то как мне связать идентификаторы?

Ответы [ 2 ]

0 голосов
/ 14 марта 2011

Сначала попробуйте переместить вызов метода GetComment в

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

}

Когда вы передаете параметр из веб-формы в URL, например, mySite / Comments.aspx? R_id = 18 тогда вы должны использовать объект Request ["r_id"]. Об объекте запроса , MSDN Но когда вы устанавливаете Session ["r_id"] = 18 для отправки или другого действия пользователя, вы должны использовать Session ["r_id"] для получения значения. О сеансе .

0 голосов
/ 18 мая 2009

Я не уверен, что это ваша проблема, но этот код ...

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

Ничего не делает, потому что вы объявляете r_id в области действия блока if и ничего не делаете с ним. Таким образом, вы не смогли застраховать, что Session ["r_id"] не является нулевым, когда вы перебираете его с помощью оператора LINQ. Вы хотели передать r_id в GetComment для использования для сравнения с c.r_id вместо того, чтобы вернуться к сеансу?

...