【问题标题】:my List lost its values when leave page_load() in c#在 c# 中离开 page_load() 时,我的列表丢失了它的值
【发布时间】:2016-12-26 10:42:41
【问题描述】:

我有一个这样的公开列表:

public List<links> googleRec = new List<links>();

public class links
{
    public string url { get; set; }
    public string title { get; set; }
    public string description { get; set; }
    public int place { get; set; }
}

我在 page_load() 中设置了这些值

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {  //googlerec get its values in page_load correctly}
 }

当我想在 page_load 之外的 googlerec 中使用值时,它有 0 条记录

foreach (links element in googleRec)
        {

            //googlerec has no record here
     }

【问题讨论】:

  • 你考虑过使用viewstate吗?

标签: c# asp.net list


【解决方案1】:

您可以在会话中存储列表

Session["googleRec"] = new List<links>();

【讨论】:

  • 我应该如何检索它的字段?
  • List googleRec = (List)Session["googleRec"];
【解决方案2】:

您可以使用ViewState,它通常用于保存特定网页的特定信息。

Page_Load() 活动中将您的列表保存在ViewState

ViewState["myList"] = googleRec;

ViewState取回列表

List<links> googleRec= (List<links>)ViewState["myList"];

如果您想了解更多关于ViewState 的信息,这里有一个详细的链接。 https://msdn.microsoft.com/en-us/library/ms972976.aspx

【讨论】:

  • 我应该这样声明 myList 吗? public List&lt;links&gt; myList= new List&lt;links&gt;(); 因为现在我有这个错误:The name 'myList' does not exist in the current
  • 我认为你弄错了。像在public List&lt;links&gt; googleRec = new List&lt;links&gt;(); 之前所做的那样声明变量,然后将其分配给ViewState["myList"] = googleRec; 请注意,“myList”只是一个键名,您可以将其更改为任何您想要的名称。这个“myList”键只是用来设置和获取来自ViewState的数据
  • 我收到此错误:Type '_Default+links' in Assembly 'App_Web_r3cgi21i, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable. 我无法将对象存储在视图状态中,除非它被标记为可序列化。我该如何解决?
  • 在你的类上添加 [Serializable] 属性。 [Serializable] public class links { public string url { get; set; } public string title { get; set; } public string description { get; set; } public int place { get; set; } } 这应该可以解决您遇到的错误
【解决方案3】:

考虑以下示例。

后面的代码:

public partial class _Default : Page
{

    public List<links> googleRec = new List<links>();

    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack)
        {
            googleRec = GetLinks();
            Session["links"] = googleRec;
        }
        else
        {
            googleRec = (List<links>)Session["links"];
        }
    }

    private List<links> GetLinks()
    {
        return new List<links>
        {
            new links {description = "new link 1", place = 1, title = "link title 1", url = "https://www.facebook.com/" },
            new links {description = "new link 2", place = 2, title = "link title 2", url = "http://www.google.pl" },
            new links {description = "new link 3", place = 3, title = "link title 3", url = "https://twitter.com/?lang=pl" },
        };
    }
}

查看:

<hr />

<div class="row">
    <div class="col-md-4">

        <% foreach (links item in googleRec) { %>

        <div>
            <%= item.title  %>
        </div>

        <% } %>
    </div>
</div>

<hr />

<asp:Button ID="sender" runat="server" Text="Do postback" />

【讨论】:

    猜你喜欢
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多