【发布时间】:2011-01-03 22:30:06
【问题描述】:
如果有人帮助我了解这种情况,我将不胜感激。 我不知道为什么,但是当我编辑选定的 ListView 项目(包含几个文本框)然后在 ItemUpdating 事件中按更新按钮 时,我总是得到旧值而不是最近键入的值。 为什么?
- 我不使用 Page_Load 事件,所以我不需要检查 PostBack
- 我尝试在将数据从 DB 绑定到 ListView 之前获取值,因此它无法覆盖最近键入的值
- 我尝试在不同的事件处理程序中获取 TextBoxes 值 - ItemCommand、ItemUpdating、ItemDataBound - 结果始终相同
- Collection NewValues 和 OldValues 总是空的(我想这是因为我没有使用 SqlDataSource 控件)
- 我可以获得新值的唯一一种方法是检查请求,但在这种情况下我不能使用控制验证器...所以可能只使用请求是个坏主意。
这是ItemUpdating方法的代码:
ListViewItem editItem = AdminUsersListView.EditItem;
Guid userId = new Guid((editItem.FindControl("UserId") as HiddenField).Value);
Hashtable dataUpdate = new Hashtable
{
{ "UserName", Request[ (editItem.FindControl("UserNameNew") as TextBox).UniqueID ] },
{ "Email", Request[ (editItem.FindControl("Email") as TextBox).UniqueID ] },
{ "IsApproved", Request[ (editItem.FindControl("IsApproved") as CheckBox).UniqueID ] == "on" },
{ "IsLockedOut", Request[ (editItem.FindControl("IsLockedOut") as CheckBox).UniqueID ] == "on" }
};
var x1 = dataUpdate["UserName"]; // this is corrent new value from Request
var x2 = (editItem.FindControl("UserNameNew") as TextBox).Text; // this is WRONG! OLD! value from TextBox ... Why???
using (Entities entities = new Entities())
{
aspnet_Membership membershipItem = entities.aspnet_Membership.Where(MBS => MBS.UserId == userId).FirstOrDefault();
membershipItem.Email = dataUpdate["Email"].ToString();
membershipItem.LoweredEmail = membershipItem.Email.ToLower();
membershipItem.IsApproved = Convert.ToBoolean(dataUpdate["IsApproved"]);
membershipItem.IsLockedOut = Convert.ToBoolean(dataUpdate["IsLockedOut"]);
entities.SaveChanges();
aspnet_Users userItem = entities.aspnet_Users.Where(USR => USR.UserId == userId).FirstOrDefault();
userItem.UserName = dataUpdate["UserName"].ToString();
userItem.LoweredUserName = userItem.UserName.ToLower();
entities.SaveChanges();
}
AdminUsersListView.EditIndex = -1;
AdminUsersListView.DataSource = _getDataList();
AdminUsersListView.DataBind();
谢谢,艺术
【问题讨论】:
标签: .net events listview controls