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 ответ
Попробуйте обернуть элементы управления панелью обновлений.
Вы также можете копаться в коде или публиковать более подробную информацию. Причина, по которой события не срабатывают, возможно, заключается в дополнительной логике, не показанной в вашем листинге кода. Я не могу воспроизвести проблему.