Если я правильно понимаю ваш вопрос, вам просто нужно составить полный, конкретный селектор CSS, например, div.side_categories ul li a
.
Например:
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class JSoupTest {
public static void main(String[] args) {
String markup =
"<div class=\"side_categories\">" +
"<ul>" +
"<li>" +
"<a href=\"#\">Link 1</a>" +
"</li>" +
"<li>" +
"<a href=\"#\">Link 2</a>" +
"</li>" +
"</ul>" +
"</div>";
Document doc = Jsoup.parse(markup);
Elements links = doc.select("div.side_categories ul li a");
for (Element link : links) {
System.out.println(link);
}
}
}
Результат:
<a href="#">Link 1</a>
<a href="#">Link 2</a>
Используйте управление сервером вместо того, чтобы делать элемент управления вводом runat=server
<asp:CheckBox id="whatever" runat="Server" />
Когда Вы устанавливаете значение в своем ItemDataBound, Вы используете FindControl
CheckBox checkBox = (CheckBox)e.Item.FindControl("whatever");
checkBox.Checked = true;
Когда Вы получаете объекты, Вы также используете FindControl от объекта в конструкции foreach. Кроме того, в зависимости от того, как Вы связали с данными его, DataItem больше не может быть там после обратной передачи.
foreach (RepeaterItem item in myRepeater.Items)
{
if (item.ItemType == ListItemType.Item
|| item.ItemType == ListItemType.AlternatingItem)
{
CheckBox checkBox = (CheckBox)item.FindControl("whatever");
if (checkBox.Checked)
{ /* do something */ }
}
}
as
оператор с FindControl()
. Мне не нравится это, потому что при изменении имени элемента управления на форме можно тихо проигнорировать ошибку разработки и мешать разыскивать. Я пытаюсь только использовать as
оператор, если управление, как гарантируют, не будет там.Обновление для: Который CheckBox который? В представленном HTML Вы закончите тем, что имели все они имя флажка как
ctl00_cph0_ParentContainer_MyRepeater_ctl01_MyCheckbox
ctl00_cph0_ParentContainer_MyRepeater_ctl02_MyCheckbox
ctl00_cph0_ParentContainer_MyRepeater_ctl03_MyCheckbox
Вы не заботитесь о том, что имена то, потому что foreach объект. FindControl () получает их для Вас, и Вы ничего не должны принимать о них. Однако, когда Вы выполняете итерации через foreach, Вам обычно нужен способ сослаться на тот назад к чему-то. Большую часть времени это сделано, также имея asp:HiddenField контроль вместе с каждым CheckBox для содержания идентификатора для соответствия ему назад до корректного объекта.
Примечание по безопасности:: существует проблема безопасности с использованием скрытых полей, потому что скрытое поле может быть изменено в JavaScript; всегда будьте сознательны, что это значение, возможно, было изменено пользователем, прежде чем форма была отправлена.
Вы могли бы найти легче использовать управление CheckBoxList.
В простом случае Вы установили бы DataTextVield и DataValueField к имени и значению, как вытянуто от Вашего источника данных (предполагающий, что Вы заполняете от источника данных), и затем обяжите это создавать объекты.
Вероятно, меньше работы с Вашей стороны, чем создание флажков в повторителе.
Вот конкретный код для обработки скрытого поля:
MARKUP:
<asp:HiddenField ID="repeaterhidden" Value='<%# DataBinder.Eval(Container.DataItem, "value")%>' runat="server" >
C #:
{
HiddenField hiddenField = (HiddenField)item.FindControl(repeaterStringhidden);
{ /* do something with hiddenField.Value */
}