在代码隐藏中初始化字典,并在 Web 窗体 asp.net 视图中访问



我想在页面加载时初始化字典,然后在foreach循环中访问此字典值。我首先初始化字典,然后将其对象提供给视图状态以在 HTML 中访问,但面临错误。

页面加载:

protected void Page_Load(object sender, EventArgs e)
{
    Dictionary<object, object> mydictionary = new Dictionary<object, object>();
    mydictionary["name"] = "Faizan";
    mydictionary["age"] = 10;
    ViewState["Data"] = mydictionary;
    //Session["FirstName"] = name;
}

Aspx:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Faizan._Default" %>
<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
    <table>
    <% foreach (KeyValuePair<object, object> pair in ViewState["Data"]) { %>
        <tr><td><%= myItem.title %></td></tr>
    <% } %>
    </table>
</asp:Content>

像这样Dictionary<object, object>ViewState

<table>
    <% foreach (KeyValuePair<object, object> pair in ViewState["w"] as Dictionary<object, object>)
        { %>
    <tr>
        <td><%= pair.Key %> = <%=pair.Value%></td>
    </tr>
    <% } %>
</table>

您使用"w"键添加到ViewState对象,但使用"Data"键检索。

此外,ViewState 旨在存储页面请求周期的数据 - 您无需直接添加到视图状态,您可以在代码隐藏中创建受公共 pr 保护的属性,并在循环中使用它。

或者,您也可以使用转发器,它将自动在 ViewState 中添加项目,以便将它们保留在回发周期中。