Буду признателен, если кто-нибудь поможет мне разобраться в этой ситуации.Я не знаю почему, но когда я редактирую выбранный элемент ListView (содержащий несколько текстовых ящиков), а затем нажимаю кнопку Обновить в событии ItemUpdating, я всегда получаю старые значения вместо тех, которые были набраны недавно.Почему?
- Я не использую событие Page_Load, поэтому мне не нужно проверять PostBack
- Я пытаюсь получить значение, прежде чем связать данные из БД в ListView, поэтомуНевозможно переопределить недавно введенные значения
- Я пытался получить значения TextBoxes в разных обработчиках событий - ItemCommand, ItemUpdating, ItemDataBound - результат всегда одинаковдумаю, это потому, что я не использую элемент управления 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();
Спасибо, Art