Я создал пользовательский элемент управления, предназначенный для расширения функциональности GridView. Он наследуется от UserControl и реализует IPostBackEventHandler.
Проблема, с которой я столкнулся, заключается в том, что функция SOMETIMES IPostBackEventHandler.RaisePostBackEvent не вызывается платформой. Я разместил этот элемент управления на нескольких страницах, и на некоторых страницах он работает нормально, а на некоторых страницах - нет. Я проверил Request ["__EVENTTARGET"] и убедился, что он равен UniqueID элемента управления, но RaisePostBackEvent по-прежнему не вызывается.
Кто-нибудь знает причину, по которой RaisePostBackEvent может не вызываться?
Вот код для моего пользовательского контроля:
namespace Warrior.PL.Controls
{
/// <summary>
/// A GridView that supports filter fields at the top of each column.
/// </summary>
[ParseChildren(ChildrenAsProperties = true)]
[ToolboxData("<{0}:FilterableGridView runat=\"server\"></{0}:FilterableGridView>")]
public partial class FilterableGridView : UserControl, IPostBackEventHandler
{
...
#region IPostBackEventHandler Members
void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)
{
if (eventArgument != null && eventArgument.StartsWith("Filter"))
{
OnFiltering(new GridViewFilterEventArgs()); // This is a function that I created
}
}
#endregion
...
}
}
Вот реализация элемента управления на одной из страниц, которая работает:
<warrior:FilterableGridView ID="gvItemCert" runat="server" AllowPaging="true" AllowSorting="true" AutoGenerateColumns="false" CellPadding="4" CssClass="GridView"
OnPageIndexChanging="gvItemCert_PageIndexChanging" OnRowDataBound="gvItemCert_RowDataBound" OnSorting="gvItemCert_Sorting" OnFiltering="gvItemCert_Filtering" PageSize="100">
...
</warrior:FilterableGridView>
А вот реализация на странице, где она не работает:
<warrior:FilterableGridView ID="gvEquipSN" runat="server" AllowPaging="true" AllowSorting="true" AutoGenerateColumns="false" CellPadding="4" CssClass="GridView" EnableViewState="false"
OnPageIndexChanging="gvEquipSN_PageIndexChanging" OnRowDataBound="gvEquipSN_RowDataBound" OnSorting="gvEquipSN_Sorting" OnFiltering="gvEquipSN_Filtering" PageSize="20">
...
</warrior:FilterableGridView>
Единственное отличие, которое я вижу, состоит в том, что тот, который не работает, имеет EnableViewState = "false". Я исключил это как проблему, так как установка EnableViewState = "true" ничего не помогает.
Кроме того, я использую AJAX на обеих страницах.