UpdatePanel을 사용하고 자바 스크립트로 리피터 내부에서 컨트롤의 '클래스'속성을 변경하는 데 문제가 있습니다. 여기리피터 내부에서 컨트롤의 클라이언트 측 "클래스"변경과 관련된 Updatepanel 문제
일부 코드 : 내가 "인 aButton"을 클릭 aspx--
<script type="text/javascript">
function changeClass(ctl) {
if (ctl.className == "marked") {
ctl.className = "unmarked";
} else {
ctl.className = "marked";
}
}
</script>
<!-- some html -->
<asp:UpdatePanel ID="upp" runat="server">
<ContentTemplate>
<asp:Repeater ID="rpt1" runat="server" onitemdatabound="rpt1_ItemDataBound">
<ItemTemplate>
<a id="aButton" runat="server" href="javascript:void(0)">
<!-- some other controls -->
</a>
</ItemTemplate>
</asp:Repeater>
</ContentTemplate>
</asp:UpdatePanel>
--Codebehind--
protected void rpt1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
MyClass obj = (MyClass)e.Item.DataItem;
((HtmlAnchor)e.Item.FindControl("aButton")).Attributes.Add("class", "marked");
//some other code....
}
}
//method called after the bind on 'rpt1'
private void mymethod()
{
foreach (RepeaterItem ri in rpt1.Items)
{
HtmlAnchor aButton = (HtmlAnchor)ri.FindControl("aButton");
if (Must-be-unmarked)
aButton.Attributes.Add("class", "unmarked");
aButton.Attributes.Add("OnClick", "changeClass(this);");
}
}
문제가 --on
, 클래스는 정상적으로 변경되지만, 코드 비하인드에 와서 컨트롤의 '클래스'를 통해 표시 또는 표시 해제 여부를 확인하면 실행시 표시되는 "aButton"이 아닌 리피터의 ItemDataBound에 표시된 컨트롤 만 가져옵니다. 팀 이자형. 클라이언트 측 코드에서 클래스 속성을 변경하면 서버 측이 그것에 대해 알 수 없습니다
private void checkMarked()
{
foreach (RepeaterItem ri in rpt1.Items)
{
if (((HtmlAnchor)ri.FindControl("aButton")).Attributes["class"] == "marked")
{
//do something...
}
}
}
답장을 보내 주셔서 감사합니다. 수업을 받고 싶지만 내 문제는 HiddenField 솔루션을 사용하여 해결되었습니다. –
@servergta 당신을 위해 기쁘다. – Nate