Добрый день всем!
Есть Control со следующей разметкой
<%@ Control Language="c#" CodeBehind="PickStatus.ascx.cs" AutoEventWireup="True" Inherits="BugNET.UserControls.PickStatus" %>
<asp:DropDownList
id="dropStatus"
CssClass="form-control"
OnSelectedIndexChanged="dropStatus_OnSelectedIndexChanged"
Runat="Server">
<asp:ListItem Value="0">-- Select Status --</asp:ListItem>
</asp:DropDownList>
<asp:RequiredFieldValidator
id="reqVal"
Visible="false"
ControlToValidate="dropStatus"
InitialValue="0"
Text="(required)"
ErrorMessage="Status is required"
Runat="Server"
meta:resourcekey="reqVal"
CssClass="text-danger validation-error" />
Это вот CodeBehind:
public partial class PickStatus : System.Web.UI.UserControl
{
/// <summary>
/// Gets or sets a value indicating whether [display default].
/// </summary>
/// <value><c>true</c> if [display default]; otherwise, <c>false</c>.</value>
public bool DisplayDefault { get; set; }
/// <summary>
/// Gets the selected text.
/// </summary>
/// <value>The selected text.</value>
public string SelectedText
{
get { return dropStatus.SelectedItem.Text; }
}
public bool AutoPostBack
{
set { dropStatus.AutoPostBack = value; }
}
/// <summary>
/// Gets or sets the selected value.
/// </summary>
/// <value>The selected value.</value>
public int SelectedValue
{
get {return Int32.Parse(dropStatus.SelectedValue); }
set
{
try
{
dropStatus.SelectedValue = value.ToString();
}
catch {}
}
}
/// <summary>
/// Gets or sets a value indicating whether this <see cref="PickStatus"/> is enabled.
/// </summary>
/// <value><c>true</c> if enabled; otherwise, <c>false</c>.</value>
public bool Enabled
{
get { return dropStatus.Enabled; }
set { dropStatus.Enabled = value; }
}
/// <summary>
/// Gets or sets the data source.
/// </summary>
/// <value>The data source.</value>
public List<Status> DataSource { get; set; }
/// <summary>
/// Binds a data source to the invoked server control and all its child controls.
/// </summary>
public override void DataBind()
{
dropStatus.Items.Clear();
dropStatus.DataSource = DataSource;
dropStatus.DataTextField = "Name";
dropStatus.DataValueField = "Id";
dropStatus.DataBind();
if (DisplayDefault)
dropStatus.Items.Insert(0, new ListItem(GetLocalResourceObject("SelectStatus").ToString(), "0"));
}
/// <summary>
/// Gets or sets a value indicating whether this <see cref="PickStatus"/> is required.
/// </summary>
/// <value><c>true</c> if required; otherwise, <c>false</c>.</value>
public bool Required
{
get { return reqVal.Visible; }
set { reqVal.Visible = value; }
}
public void dropStatus_OnSelectedIndexChanged(object sender, EventArgs e)
{
}
}
}
Подключаю его на страницу таким образом:
<%@ Register TagPrefix="it" TagName="PickStatus" Src="~/UserControls/PickStatus.ascx" %>
<it:PickStatus ID="DropStatus" AutoPostBack="True" runat="Server" DisplayDefault="false" />
Проблема в том, что у него нет события обычного для DropDownList'a - OnSelectedIndexChanged (по крайней мере IntelliSense не показывает)
А мне оно нужно, чтобы например проверить внутри него индекс выбранного элемента и сделать что-то на странице, исходя из этого.
Как можно отнаследовать событие от DropDownList, того, который внутри UserControl'a?
В событиях разбираюсь не очень хорошо, понимаю, что когда мы на разметке пишем, например
<asp:DropDownList runat="server" OnSelectedIndexChanged="SomeEvent" />
мы таким образом вызываем метод virtual void OnSelectedIndexChanged() у которого внутри Handler, в который запихивается метод SomeEvent()?