C# 类级别变量不';我不能坐定

C# 类级别变量不';我不能坐定,c#,.net,dictionary,iis,repeater,C#,.net,Dictionary,Iis,Repeater,我有一个我正在开发的.net网站,它使用转发器来构建几个表。作为数据绑定的一部分,我将向类级字典对象添加键,以便稍后可以调用它们并检查它们是否已更改。下面是我的代码: public partial class pointsEdit : System.Web.UI.Page { public Dictionary<Int32, TextBox[]> PointsValues; protected void Page_Load(object sender, Event

我有一个我正在开发的.net网站,它使用转发器来构建几个表。作为数据绑定的一部分,我将向类级字典对象添加键,以便稍后可以调用它们并检查它们是否已更改。下面是我的代码:

public partial class pointsEdit : System.Web.UI.Page
{

    public Dictionary<Int32, TextBox[]> PointsValues;

    protected void Page_Load(object sender, EventArgs e)
    {
        Int32 clientID = 0;
        if (Request.QueryString["id"] != null)
        {
             if (Int32.TryParse(Request.QueryString["id"], out clientID) == true) {
                 //try
                 //{
                     if (!IsPostBack)
                     {
                         btnReturn.HRef = "clientEdit.aspx?id=" + clientID;

                         PointsValues = new Dictionary<int, TextBox[]>();
                         using (var db = new db())
                         {

                             var ev = db.activityPoints.Where(x => x.ClientID == clientID).ToArray();
                             tblEvent.DataSource = ev;
                             tblEvent.DataBind();

                         }


                     }
                 //}
                 //catch
                 //{

                 //}
             }
        }

    }


    protected void tblEvent_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {

            using (var db = new db())
            {
                Int32 TypeKey;
                Int32 ActivityID;
                Int32.TryParse(DataBinder.Eval(e.Item.DataItem,"TypeKey").ToString(),out TypeKey);
                Int32.TryParse(DataBinder.Eval(e.Item.DataItem, "ActivityID").ToString(), out ActivityID);

                var ev = db.events.Where(x => x.ID == TypeKey).First();
                ((Label)e.Item.FindControl("lblEvent")).Text = ev.name.ToString();
                ((TextBox)e.Item.FindControl("tbPointValue")).Text = DataBinder.Eval(e.Item.DataItem, "MaxPointsEach").ToString();
                ((TextBox)e.Item.FindControl("tbMaxScored")).Text = DataBinder.Eval(e.Item.DataItem, "MaxAttempts").ToString();

                PointsValues.Add(ActivityID, new TextBox[] { ((TextBox)e.Item.FindControl("tbPointValue")), ((TextBox)e.Item.FindControl("tbMaxScored")) });

            }
    }


   protected void btnSubmit_Click(object sender, EventArgs e)
    {
        Int32 ActivityID;
        TextBox[] TextBoxes;
        Int32 clientID = 0;
        Int32 ParseResult = 0;
        Int32 MaxPoints = 0;
        Int32 MaxAttempts = 0;
        Boolean NeedsUpdate = false;

          if (Request.QueryString["id"] != null)
          {
              if (Int32.TryParse(Request.QueryString["id"], out clientID) == true)
              {
                  //try
                 //{


                      using (var db = new db())
                      {
                          var s = db.activityPoints.Where(x => x.ClientID == clientID).ToArray();

                          for (int i = 0; i < s.Length; i++)
                          {
                              ActivityID = s[i].ActivityID;
                              TextBoxes = PointsValues[ActivityID];
                          }
                      }

                  //} catch {

                  //}

                  }
              }


        }
 }
公共部分类点dit:System.Web.UI.Page
{
公共字典点值;
受保护的无效页面加载(对象发送方、事件参数e)
{
Int32 clientID=0;
if(Request.QueryString[“id”!=null)
{
if(Int32.TryParse(Request.QueryString[“id”],out clientID)==true){
//试一试
//{
如果(!IsPostBack)
{
btnReturn.HRef=“clientEdit.aspx?id=“+clientID;
PointsValue=新字典();
使用(var db=new db())
{
var ev=db.activityPoints.Where(x=>x.ClientID==ClientID.ToArray();
tblEvent.DataSource=ev;
tblEvent.DataBind();
}
}
//}
//抓住
//{
//}
}
}
}
受保护的void tblEvent_ItemDataBound(对象发送方、RepeaterItemEventArgs e)
{
使用(var db=new db())
{
Int32打字键;
Int32活动ID;
Int32.TryParse(DataBinder.Eval(e.Item.DataItem,“TypeKey”).ToString(),out-TypeKey);
Int32.TryParse(DataBinder.Eval(e.Item.DataItem,“ActivityID”).ToString(),out ActivityID);
var ev=db.events.Where(x=>x.ID==TypeKey).First();
((标签)例如Item.FindControl(“lblEvent”).Text=ev.name.ToString();
((TextBox)e.Item.FindControl(“tbPointValue”)).Text=DataBinder.Eval(e.Item.DataItem,“MaxPointsEach”).ToString();
((TextBox)e.Item.FindControl(“tbMaxScored”)).Text=DataBinder.Eval(e.Item.DataItem,“MaxAttempts”).ToString();
添加(ActivityID,新文本框[]{((文本框)e.Item.FindControl(“tbPointValue”),((文本框)e.Item.FindControl(“tbMaxScored”)));
}
}
受保护的void btnsupmit\u单击(对象发送者,事件参数e)
{
Int32活动ID;
TextBox[]文本框;
Int32 clientID=0;
Int32 ParseResult=0;
Int32最大点=0;
Int32最大尝试次数=0;
布尔值NeedsUpdate=false;
if(Request.QueryString[“id”!=null)
{
if(Int32.TryParse(Request.QueryString[“id”],out clientID)==true)
{
//试一试
//{
使用(var db=new db())
{
var s=db.activityPoints.Where(x=>x.ClientID==ClientID.ToArray();
对于(int i=0;i
块中有更多的代码实际更新了值,但是我的循环只到了这一步,所以为了简单起见,我删除了它。当到达submit方法的“textboxs=PointsValues[ActivityID];”行时,Dictionary对象似乎不再填充


我已经验证了在将活动ID添加到字典时是否存在该活动ID,并且对于应该添加的对象的数量,该计数是正确的。但是,在TextBox行,它告诉我“给定的键在字典中不存在”,当我尝试获取计数时,它给出了“对象引用未设置为对象实例”错误。如果我将dictionary对象设置为该行之前的新dictionary对象,它允许我获得一个计数(0)。似乎该对象在设置后正在以某种方式重置。有什么想法吗?

您正在使用ASP.NET Web,这意味着您将在处理请求后释放对象上下文。这意味着你的字典会丢失。您应该将它保存在某种会话中,以便跨请求维护它


您可以找到有关如何实现会话@

的详细信息,您正在使用ASP.NET Web,这意味着您将在处理请求后释放对象上下文。这意味着你的字典会丢失。您应该将它保存在某种会话中,以便跨请求维护它。这似乎是我的问题。非常感谢。很高兴我能帮上忙,把它作为答案贴了出来,请接受。谢谢