我在ASP.NET項目的許多地方使用Session變量來存儲數據。我通常寫這樣的:NullReferenceException當分配會話變量/值
public uint MyPropery
{
get
{
object o = Session["MyProperty"];
if (o != null)
return (uint)o;
else
return 0;
}
set
{
Session["MyProperty"] = value;
}
}
但是,這次我在setter中得到一個NullReferenceException。據我所知,以上述方式分配Session變量是有效的。此外,會話不是null,也不是值。
對此的任何想法?
編輯:
增加了對在該物業所在的用戶控件的代碼。我正在使用ext.net,但這不應該與此有任何關係。有一種想法超出了我的想法:
UserControl(見下面)在頁面的代碼隱藏中動態添加。這與它有什麼關係?
我加入這樣的用戶控件(在頁面上):
foreach(CoreCommons.System.Comment c in cg.Reply_Comments)
{
WebApplicationExtNetTest.Secure.UserControls.CoreComment cc = new UserControls.CoreComment();
cc._Comment = c; // here is where i get the NullRef
this.Panel1.ContentControls.Add(cc);
}
標記:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="CoreComment.ascx.cs" Inherits="WebApplicationExtNetTest.Secure.UserControls.CoreComment" %>
<%@ Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
<ext:Panel runat="server" ID="CoreCommentOuterPanel" BodyStyle="background: #FFFDDE">
<Items>
<ext:ColumnLayout runat="server">
<Columns>
<ext:LayoutColumn ColumnWidth="0.8">
<ext:Image runat="server" ImageUrl="/Resources/bullet_triangle_green_16x16.png" Align="AbsMiddle"></ext:Image>
<ext:Label runat="server" ID="lblCommentInfo"></ext:Label>
</ext:LayoutColumn>
<ext:LayoutColumn ColumnWidth="0.2"><ext:Button runat="server" ID="btnDelete" Icon="Delete"></ext:Button></ext:LayoutColumn>
</Columns>
</ext:ColumnLayout>
<ext:Label runat="server" ID="lblComment"></ext:Label>
</Items>
</ext:Panel>
代碼隱藏:
namespace WebApplicationExtNetTest.Secure.UserControls
{
public partial class CoreComment : System.Web.UI.UserControl
{
public CoreCommons.System.Comment _Comment
{
get
{
object o = Session["CoreComment_ObjectId"];
if (o != null)
return (tWorks.Core.CoreCommons.System.Comment)o;
else
return null;
}
set
{
Session["CoreComment_ObjectId"] = value;
SetComment();
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
private void SetComment()
{
if (_Comment == null)
{
lblCommentInfo.Text = "";
lblComment.Text = "";
}
else
{
lblCommentInfo.Text = _Comment.Author + ", " + _Comment.TimeStamp.ToString("g");
lblComment.Text = _Comment.Text;
}
}
}
}
您發佈的代碼看起來應該起作用。你可能會發布失敗的實例嗎? – SirViver 2011-05-14 22:13:17
我一直使用相同的模式沒有問題。編號說這個問題是在別的地方。你可以在會話不存在的情況下設置值 – Jeff 2011-05-14 23:13:34
@SirViver:它有很多代碼,是項目的一部分。它在UserControl中,我更新了帖子併發布了整個UserControl。 – Ted 2011-05-15 08:22:06