У меня есть вложенный ретранслятор, содержащий элемент управления CheckBox.ASP.NET CheckBox Control, показывающий как литерал
<asp:Repeater runat="server" ID="optionalRepeater" OnItemDataBound="CheckCompCondiments">
<HeaderTemplate>
<div class="sectionHeader" style="font-weight: bold; font-size: 13pt; text-decoration: underline; margin: 20px 0px 15px 0px;">
Product Extras
</div>
</HeaderTemplate>
<ItemTemplate>
<div class="col-md-4" style="border: 1px solid #ccc; margin: 5px;">
<asp:HiddenField runat="server" ID="salesMenuID" Value='<%#Eval("sales_menu_id") %>' />
<asp:HiddenField runat="server" ID="minVal" Value='<%#Eval("minVal") %>' />
<asp:HiddenField runat="server" ID="maxVal" Value='<%#Eval("maxVal") %>' />
<p>
<asp:Label runat="server" ID="condHdr" style="text-decoration: underline;" Text='<%#Eval("sales_menu_desc") %>'></asp:Label>
</p>
<asp:Repeater runat="server" ID="compMenuRadio">
<HeaderTemplate>
</HeaderTemplate>
<ItemTemplate>
<asp:HiddenField runat="server" ID="hdPriLvl"/>
<input type="radio" name="compSelect" runat="server"/>
</ItemTemplate>
<FooterTemplate>
<hr/>
</FooterTemplate>
</asp:Repeater>
<asp:Repeater runat="server" ID="compMenuCheck">
<HeaderTemplate></HeaderTemplate>
<ItemTemplate>
<asp:HiddenField runat="server" ID="hdPriLvl" Value='<%#Eval("pPriceLvl") %>' />
<asp:CheckBox runat="server" ID='compSelected' CssClass='<%# Eval("pcode") %>' Text='<%# Eval("pdesc") %> '/>
<%--<input type="checkbox" id="compSelect" runat="server" value='<%#Eval("pCode") %>'/>--%>
<%-- <%#Eval("pDesc") %>--%>
</ItemTemplate>
<FooterTemplate>
</FooterTemplate>
</asp:Repeater>
<asp:DropDownList runat="server" ID="compSelect" Visible="False" style="width: 98%; margin: 5px 0px 5px 0px;"/>
</div>
</ItemTemplate>
</asp:Repeater>
На моей стороне сервера У меня есть следующий код:
if (optionalRepeater.Items.Count > 0)
{
foreach (RepeaterItem compItem in optionalRepeater.Items)
{
HtmlInputHidden priLvlVal = (HtmlInputHidden)compItem.FindControl("hdPriLvl");
foreach (Control compCtrl in compItem.Controls)
{
if (compCtrl.GetType() == typeof(CheckBox))
{
CheckBox checkBox = (CheckBox)compCtrl;
CheckBox chk = (CheckBox) checkBox;
if (checkBox.Checked)
{
string prod = checkBox.CssClass;
string childGuiud = Guid.NewGuid().ToString("N").ToUpper();
hasCondiment = true;
ShoppingCart.Instance.AddItem(prod, childGuiud, mainGuid, Session["transactionGuid"].ToString(), priLvlVal.Value, hasCondiment, 1, null);
checkBox.Checked = false;
}
}
}
}
}
Мой код получить как эту линию
if (compCtrl.GetType() == typeof(CheckBox))
Но никогда не делает его внутри, если заявление. Когда я ожидаю, что тип будет CheckBox, он произнесет буквальный элемент управления.
Может ли кто-нибудь увидеть что-нибудь, что я мог бы сделать неправильно, я смотрел на это какое-то время, и я не могу больше смотреть дальше.
Thanks, Somango!
Спасибо за ваш ответ Время. Я пробовал ваше решение, но оно выдавало ошибку из-за моего окна DropDown с тем же идентификатором. Я обновил вопрос, включив в него родительский ретранслятор. Я должен был это сделать в первую очередь. – somango
@somango: затем сначала найдите свой внутренний повторитель через 'FindControl', а затем зациклируйте эти элементы и получите' CheckBox' через 'innerItem.FindControl (« compSelect »)'. В стороне, почему бы вам не использовать 'CheckBox' вместо' input type = "radio" ', если вам нужно получить доступ к нему на сервере? –
Я отмечаю это как правильный ответ. Хотя на самом деле это было не то, что я использовал, это поставило меня на правильный путь, теперь у меня есть приложение, работающее так, как ожидалось, поэтому мистер Тим Шмельтер, я говорю, что Vielen Dank !! – somango