我在usercontrol中使用Listview,我在页面加载事件中数据绑定到对象列表。
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack) return;
BindListViews();
}
private void BindListViews()
{
MyListView.DataSource = IncludeExpressions;
MyListView.DataBind();
}
我需要处理在列表中插入新项目。 为此,我添加了一个InsertItemTemplate,其中一个按钮具有“Insert”作为命令参数。 我不希望将数据持久保存到数据库,直到用户按下表单底部的保存按钮。 所以在ItemCommand事件中,这是我的代码:
protected void Expression_ItemCommand(object sender, ListViewCommandEventArgs e)
{
var listView = (sender as ListView);
var expressions = GetExpressions(listView);
var newExpression = new Expression
{
CaseSensitive = ((CheckBox)e.Item.FindControl("CaseSensitiveCheckBox")).Checked,
SearchText = ((TextBox)e.Item.FindControl("SearchTextTextBox")).Text,
Scope = (Scope)Enum.Parse(typeof(Scope), ((DropDownList)e.Item.FindControl("ScopeDropDownList")).SelectedValue, true),
Type = (Type)Enum.Parse(typeof(Type), ((DropDownList)e.Item.FindControl("TypeDropDownList")).SelectedValue, true),
};
expressions.Add(newExpression);
listView.DataSource = expressions;
listView.DataBind();
UpdatePanelInclude.Update();
}
private List<Expression> GetExpressions(ListView lv)
{
var expressions = new List<Expression>();
foreach (var row in lv.Items)
{
var searchText = ((TextBox)row.FindControl("SearchTextTextBox")).Text;
...
expressions.Add(new Expression
{
CaseSensitive = caseSensitive,
Scope = scope,
Type = type,
SearchText = searchText
});
}
return expressions;
}
在我在listview周围添加UpdatePanel之前,这非常正常。 当我添加一个updatepanel时,Expression_ItemCommand处理程序仅在每次点击2次时被点击,尽管每次点击都会回发页面。 在调试时,我可以看到每次单击“插入”按钮时都会输入页面的Page_Load事件,但只有每两次点击就会触及Expression_ItemCommand。未命中ItemCommand时重置listview的内容。 我在这里闻到了ViewState的问题,但我无法弄清楚如何修复它。
以下是标记的内容:
<asp:UpdatePanel ID="UpdatePanelInclude" UpdateMode="Conditional" ChildrenAsTriggers="true" runat="server">
<asp:ListView ID="MyListView" OnItemCommand="Expression_ItemCommand" OnItemInserting="ExpressionInserting" OnDataBinding="ListViewDataBinding" InsertItemPosition="LastItem" runat="server" ItemPlaceholderID="itemPlaceHolder">
... ...
任何想法如何解决这个问题?
斯特凡
答案 0 :(得分:0)
在通过控制进行looooong调查和重建页面控件之后,原因是视图状态被压缩并且脚本管理器不知何故不喜欢它,即使我为其指定了隐藏字段。
问题解决了......