ASP.net w/ C# RadiobuttonList не запускает обратную передачу

В настоящее время я создаю веб-форму, которая, среди прочего, использует выпадающий список и список radiobuttonList. Существует небольшая проверка, если вы выбираете значение для любого из этих элементов, должна быть обратная передача, и некоторые элементы могут быть перезагружены, в зависимости от логики бизнеса. Теперь я создал eventHandlers для RBL и DDL, но у меня есть проблема.

Если я изменяю значение в DDL, происходит обратная передача, и программа перебирает мой метод, никаких проблем. Если я изменяю значение в RBL, обратная передача не срабатывает, совсем нет. Странная часть в том, что если я сначала что-то изменяю в RBL, а затем что-то в DDL, он выполняет цикл по обоим обработчикам событий в правильном порядке.

Но, очевидно, это не идеально для меня. Если пользователь сначала что-то изменит в DDL, а затем в RBL, программа не будет работать должным образом.

Я опубликую свой код ниже, кто-нибудь знает, как заставить RadioButtonList вызвать постбэк / обработчик событий?

C#

protected void SchoolTypeID_Index_Changed(object sender, EventArgs e)
    {
        //code
    }

protected void ddlStudentenStad_IndexChanged(object sender, EventArgs e)
    {
        //code
    }

ASP.net

<asp:DropDownList ID="ddlStudentenStad" DataTextField="stad" DataValueField="id" AutoPostBack="true" 
OnSelectedIndexChanged="ddlStudentenStad_IndexChanged" runat="server" class="SelectDropDown"></asp:DropDownList>

<asp:RadioButtonList ID="rblSchoolType" runat="server" AutoPostBack="true" DataTextField="type" 
DataValueField="id" OnSelectedIndexChanged="SchoolTypeID_Index_Changed" RepeatDirection="Horizontal"/>

РЕДАКТИРОВАТЬ: мы также создали класс RadioButtonListAdapter, потому что у нас было больше проблем с этим элементом в прошлом. Код вставлен ниже, если кто-нибудь увидит ошибку.

открытый класс RadioButtonListControlAdapter: ControlAdapter {

public RadioButtonListControlAdapter()
{
}

protected override void Render(HtmlTextWriter writer)
{
    RadioButtonList ButtonList = Control as RadioButtonList;

    if (null != ButtonList)
    {
        int i = 0;

        if (ButtonList.RepeatDirection == RepeatDirection.Horizontal)
        {
            writer.WriteFullBeginTag("div class=\"row collapse\"");


            int aantalCols = (int)Math.Floor((double)12 / (double)ButtonList.Items.Count);
            foreach (ListItem li in ButtonList.Items)
            {
                string itemClientID = Helpers.GetListItemClientID(ButtonList, li);

                writer.WriteFullBeginTag("div class=\"large-" + aantalCols + " columns\" style=\"width:" + 100/ButtonList.Items.Count + "% !important; \"");

                writer.WriteFullBeginTag("label for=\"" + ButtonList.UniqueID + "\"");
                if (ButtonList.TextAlign == TextAlign.Right)
                {
                    RenderRadioButtonListInput(writer, ButtonList, li);
                    RenderRadioButtonListLabel(writer, ButtonList, li);
                }
                else
                {
                    RenderRadioButtonListLabel(writer, ButtonList, li);
                    RenderRadioButtonListInput(writer, ButtonList, li);
                }
                writer.WriteEndTag("label");

                writer.WriteEndTag("div");
                if (this.Page != null)
                    Page.ClientScript.RegisterForEventValidation(ButtonList.UniqueID, li.Value);
                //if (ButtonList.RepeatDirection == RepeatDirection.Vertical)
                //    writer.Write("<br />"); 
                writer.WriteLine();
            }

            writer.WriteEndTag("div");
            if (this.Page != null)
            {
                Page.ClientScript.RegisterForEventValidation(ButtonList.UniqueID);
            }
        }
        else
        {
            foreach (ListItem li in ButtonList.Items)
            {
                string itemClientID = Helpers.GetListItemClientID(ButtonList, li);
                //writer.WriteFullBeginTag("div class=\"row\"");
                writer.WriteFullBeginTag("label for=\"" + ButtonList.UniqueID + "\"");
                if (ButtonList.TextAlign == TextAlign.Right)
                {
                    RenderRadioButtonListInput(writer, ButtonList, li);
                    RenderRadioButtonListLabel(writer, ButtonList, li);
                }
                else
                {
                    RenderRadioButtonListLabel(writer, ButtonList, li);
                    RenderRadioButtonListInput(writer, ButtonList, li);
                }
                writer.WriteEndTag("label");
                //writer.WriteEndTag("div");

                if (this.Page != null)
                    Page.ClientScript.RegisterForEventValidation(ButtonList.UniqueID, li.Value);
                //if (ButtonList.RepeatDirection == RepeatDirection.Vertical)
                //    writer.Write("<br />"); 
                writer.WriteLine();
            }
        }


        if (this.Page != null)
            Page.ClientScript.RegisterForEventValidation(ButtonList.UniqueID);
    }
}

private void RenderRadioButtonListInput(HtmlTextWriter writer, RadioButtonList ButtonList, ListItem li)
{
    writer.AddAttribute(HtmlTextWriterAttribute.Id, Helpers.GetListItemClientID(ButtonList, li));
    writer.AddAttribute(HtmlTextWriterAttribute.Type, "radio");
    writer.AddAttribute(HtmlTextWriterAttribute.Name, ButtonList.UniqueID);
    writer.AddAttribute(HtmlTextWriterAttribute.Value, li.Value);

    writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "none");
    writer.AddAttribute(HtmlTextWriterAttribute.Class, "hidden-field");
    if (li.Selected)
        writer.AddAttribute(HtmlTextWriterAttribute.Checked, "checked");
    if (li.Enabled == false || ButtonList.Enabled == false)
        writer.AddAttribute(HtmlTextWriterAttribute.Disabled, "disabled");
    if (li.Enabled == true && ButtonList.Enabled == true && ButtonList.AutoPostBack)
    {
        writer.AddAttribute(HtmlTextWriterAttribute.Onclick, String.Format(@"javascript:setTimeout('__doPostBack(\'{0}\',\'\')', 0)", Helpers.GetListItemUniqueID(ButtonList, li)));
    }
    writer.RenderBeginTag(HtmlTextWriterTag.Input);
    writer.RenderEndTag();
}

private void RenderRadioButtonListLabel(HtmlTextWriter writer, RadioButtonList ButtonList, ListItem li)
{
    writer.WriteFullBeginTag("span class=\"custom radio\"");
    writer.WriteEndTag("span");      
    writer.Write(" " + li.Text);

}

}

1 ответ

Попробуйте обернуть элементы управления панелью обновлений.

Вы также можете копаться в коде или публиковать более подробную информацию. Причина, по которой события не срабатывают, возможно, заключается в дополнительной логике, не показанной в вашем листинге кода. Я не могу воспроизвести проблему.

Другие вопросы по тегам