2013-06-25 25 views
2

我正在使用Visual Studio 2005和.NET 2.0在Visual Basic中编写Web应用程序。我的代码(Default.aspx.vb)看起来像这样。使用从代码隐藏字典导致vb.net中的关键错误

Partial Public Class frmDefault 
    Inherits System.Web.UI.Page 

    Protected PageData As New Dictionary(Of String, String) 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     PageData("text") = "Hello World!" 
    End Sub 
End Class 

Default.aspx中,我有

<%=PageData("text")%> 

当直播服务器(这将获得每天约40独特的命中)上说,这将导致偶发性“给定的关键是不目前在字典中。“用下面的堆栈跟踪错误:

at System.ThrowHelper.ThrowKeyNotFoundException() 
at System.Collections.Generic.Dictionary`2.get_Item(TKey key) 
at ASP.default_aspx.__RenderContent2(HtmlTextWriter __w, Control parameterContainer) 
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) 
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) 
at System.Web.UI.Control.Render(HtmlTextWriter writer) 
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) 
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) 
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer) 
at ASP.forms_glass_master.__Render__control1(HtmlTextWriter __w, Control parameterContainer) 
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) 
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) 
at System.Web.UI.Control.Render(HtmlTextWriter writer) 
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) 
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) 
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer) 
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children) 
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer) 
at System.Web.UI.Page.Render(HtmlTextWriter writer) 
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter) 
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter) 
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer) 
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 

我在日志中看到这些每天1-2次,但同时调试,测试,或使用实时应用程序就得到了错误我自己。

为了日志的详细信息,我试图把这个表单类抓住关键错误:

Protected Function GetPageData(ByRef Key As String) As String 
    Try 
     Return PageData(Key) 
    Catch Ex As Exception 
     'Log the exception 
    End Try 
End Function 

,并使用该Default.aspx中:

<%=GetPageData("text")%> 

于是乎我发布了这个改变(一个多月前),我没有记录一个关键的异常。

(1)什么会导致原来的代码生成密钥异常?

(2)为什么更新的代码不会产生类似的键异常?

+0

我会在返回前的新行上分割出PageData(key)。返回语句可能会以某种方式混淆你的错误记录。 –

回答

-1

我可以看到

Protected PageData As New Dictionary(Of String, String) 

这意味着,PageData是接受字符串作为键和值,以及。可以说,这总共有2个参数。所以改变你的任务如下。

PageData.Add("cat", "2") 
PageData.Add("dog", "1") 
PageData.Add("llama", "0") 
PageData.Add("iguana", "-1") 
+0

这是一样的。 Dictionary类有一个默认属性,可以用来添加一个新的键/值对。请参阅[MSDN词典页面](http://msdn.microsoft.com/zh-cn/library/9tee9ht2.aspx)上的示例。 “如果某个键不存在,则为该键设置默认的Item属性会添加一个新的键/值对。”另请参阅[MSDN默认属性](http://msdn.microsoft.com/zh-cn/library/az06zx4y(v = vs.71).aspx)。 –