C# 具有状态的ASP.net listview
我在ASP.net前端有一个动态列表。用户可以单击按钮并添加任意数量的条目 我正在使用ViewState保存此数据:C# 具有状态的ASP.net listview,c#,asp.net,webforms,C#,Asp.net,Webforms,我在ASP.net前端有一个动态列表。用户可以单击按钮并添加任意数量的条目 我正在使用ViewState保存此数据: if(ViewState["items"] != null) { ListItems.DataSource = ViewState["items"]; } ListItems.DataBind(); 还有一个回调,如下所示: protected void AddItemClick(object sender, EventArgs e) { L
if(ViewState["items"] != null)
{
ListItems.DataSource = ViewState["items"];
}
ListItems.DataBind();
还有一个回调,如下所示:
protected void AddItemClick(object sender, EventArgs e)
{
List<UserEntry> ue;
if (ViewState["items"] == null)
{
ue = new List<UserEntry>();
}
else
{
ue = (List<UserEntry>)ViewState["items"];
}
ue.Add(new UserEntry());
ViewState["items"] = ue;
}
protectedvoid AddItemClick(对象发送方,事件参数e)
{
列表ue;
if(ViewState[“items”]==null)
{
ue=新列表();
}
其他的
{
ue=(列表)视图状态[“项目”];
}
添加(newuserentry());
ViewState[“items”]=ue;
}
它工作正常,问题是,每次我添加一个新项目时,我都会丢失在其他行中输入的所有数据。我如何保存这些信息
编辑:
我在.aspx页面上调用它:
<asp:ListView ID="ListItems" class="block" SortExpression="DataType" ItemStyle-Wrap="false" runat="server">
<ItemTemplate >
<table>
<tr>
<asp:TextBox ID="Name" runat="server" class="inline" Text='<%# Eval("text") %>'></asp:TextBox>
</tr>
</table>
</ItemTemplate>
</asp:ListView>
提前感谢您在哪里调用此方法?你是在同一页打电话吗?在构造列表之前,可能要将其分配给ListItems控件
protected void AddItemClick(object sender, EventArgs e)
{
List<UserEntry> ue;
if (ViewState["items"] == null)
{
ue = new List<UserEntry>();
}
else
{
ue = (List<UserEntry>)ViewState["items"];
}
ue.Add(new UserEntry());
ViewState["items"] = ue;
ListItems.DataSource = ue;
ListItems.DataBind();
}
protectedvoid AddItemClick(对象发送方,事件参数e)
{
列表ue;
if(ViewState[“items”]==null)
{
ue=新列表();
}
其他的
{
ue=(列表)视图状态[“项目”];
}
添加(newuserentry());
ViewState[“items”]=ue;
ListItems.DataSource=ue;
DataBind();
}
在这一行中,您可以在ViewState中添加时将集合分配给List和bind。可能需要检查以下几点:
Page\u Load
上将值分配给ViewState
,那么您可能不会检查它是否是postback
,或者为了克服它,您只需在If
条件中对列表项
执行值分配部分:If(!Page.IsPostback){/*do stuff*/}
列表项
protected void AddItemClick(object sender, EventArgs e)
{
List<UserEntry> ue = (List<UserEntry>)ListItems.DataSource;
if(ue == null)
{
ue = new List<UserEntry>();
}
ue.Add(new UserEntry());
ListItems.DataSource = ue;
ListItems.DataBind();
} // Just an idea though
protectedvoid AddItemClick(对象发送方,事件参数e)
{
List ue=(List)ListItems.DataSource;
如果(ue==null)
{
ue=新列表();
}
添加(newuserentry());
ListItems.DataSource=ue;
DataBind();
}//不过这只是个主意
我已经将数据绑定到ListItems。问题是我不能保存用户在网页中添加的信息。我的意思是,当我点击按钮时,它确实添加了一个新的文本框来写入,但是我丢失了我在所有其他条目中写入的所有内容。我如何保存这些信息?第二点你是对的,但是,我怎么做呢?检查第四个选项。您只需将
用户条目
列表附加到列表项
的数据源