C# 类级别变量不';我不能坐定
我有一个我正在开发的.net网站,它使用转发器来构建几个表。作为数据绑定的一部分,我将向类级字典对象添加键,以便稍后可以调用它们并检查它们是否已更改。下面是我的代码: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
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,这意味着您将在处理请求后释放对象上下文。这意味着你的字典会丢失。您应该将它保存在某种会话中,以便跨请求维护它。这似乎是我的问题。非常感谢。很高兴我能帮上忙,把它作为答案贴了出来,请接受。谢谢