Обработка событий серверных контролов на стороне клиента (ASP.NET 2.0)
Задача: на один из TextBox-ов повесить событие onchange с некоторым функционалом на JavaScript. Проблема заключается в том, что параметры события зависят от привязываемого объекта с данными (у объекта спрашивается свойство Id) и нужно использовать что-то типа <%# Eval("Id") %>
MSDN на данную тему предлагает код вида
Код:
<asp:TextBox ID="text1" runat="server" onchange="java script:alert('ахтунг!')" />
Посему использую следующий шедевр (кое чего из Fw 3.5):
Код:
<asp:TemplateField HeaderText="Значение">
<ItemTemplate>
<asp:TextBox ID="Offset" runat="server" Text='<%# Eval("Offset") %>' />
<%# new Func<string>(delegate {
WebControl parent = Container as WebControl;
if (parent != null) {
WebControl control = parent.FindControl("Offset") as WebControl;
if (control != null) {
control.Attributes.Add("onchange", DataBinder.Eval(Container.DataItem, "Id", "java script:alert('{0}')"));
}
}
return "";
})()
%>
<ajax:SliderExtender ID="OffsetExtender" runat="server" TargetControlID="Offset"
Minimum="0" Maximum="100" BoundControlID="OffsetBound" />
<asp:TextBox ID="OffsetBound" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<ItemTemplate>
<asp:TextBox ID="Offset" runat="server" Text='<%# Eval("Offset") %>' />
<%# new Func<string>(delegate {
WebControl parent = Container as WebControl;
if (parent != null) {
WebControl control = parent.FindControl("Offset") as WebControl;
if (control != null) {
control.Attributes.Add("onchange", DataBinder.Eval(Container.DataItem, "Id", "java script:alert('{0}')"));
}
}
return "";
})()
%>
<ajax:SliderExtender ID="OffsetExtender" runat="server" TargetControlID="Offset"
Minimum="0" Maximum="100" BoundControlID="OffsetBound" />
<asp:TextBox ID="OffsetBound" runat="server" />
</ItemTemplate>
</asp:TemplateField>
Возможно ли упростить решение?