JavaScript를 사용하여 ASP.NET 레이블의 가시성을 변경합니다.
-
08-06-2019 - |
문제
표시되지 않는 asp:button이 있는 ASP.NET 페이지가 있습니다.페이지에 렌더링되지 않기 때문에 JavaScript로 표시할 수 없습니다.
이 문제를 해결하려면 어떻게 해야 합니까?
해결책
클라이언트 측에서 이를 조작해야 하는 경우 서버 측에서 Visible 속성을 사용할 수 없습니다.대신 CSS 표시 스타일을 "없음"으로 설정하세요.예를 들어:
<asp:Label runat="server" id="Label1" style="display: none;" />
그런 다음 다음을 사용하여 클라이언트 측에 표시되도록 할 수 있습니다.
document.getElementById('Label1').style.display = 'inherit';
다음을 사용하여 다시 숨길 수 있습니다.
document.getElementById('Label1').style.display = 'none';
실제로는 ClientID가 "Label1"보다 더 복잡할 수 있다는 점에 유의하세요.서버측 ID가 다를 경우 getElementById와 함께 ClientID를 사용해야 합니다.
다른 팁
이 시도.
<asp:Button id="myButton" runat="server" style="display:none" Text="Click Me" />
<script type="text/javascript">
function ShowButton() {
var buttonID = '<%= myButton.ClientID %>';
var button = document.getElementById(buttonID);
if(button) { button.style.display = 'inherit'; }
}
</script>
이 작업을 수행하려면 포스트백이 필요하므로 서버측 코드를 사용하지 마세요.Visibility="false"를 사용하는 대신 버튼을 숨기는 CSS 속성을 설정할 수 있습니다.그런 다음 자바스크립트에서 버튼을 다시 표시하고 싶을 때마다 해당 속성을 다시 전환하세요.
버튼이 Naming Container 컨트롤 내에 있는 경우 서버 ID와 다를 수 있으므로 ClientID가 사용됩니다.여기에는 다양한 종류의 패널이 포함됩니다.
계속해서 무엇을 데이브 워드 말했다:
- 설정할 수 없습니다. 보이는 컨트롤이 렌더링되지 않으므로 속성을 false로 설정합니다.
- 당신은 스타일 그것을 설정하는 속성 표시하다 에게 없음.
페이지/컨트롤 디자인
<asp:Label runat="server" ID="Label1" Style="display: none;" />
<asp:Button runat="server" ID="Button1" />
코드 비하인드
로드 섹션 어딘가에:
Label label1 = (Label)FindControl("Label1");
((Label)FindControl("Button1")).OnClientClick = "ToggleVisibility('" + label1.ClientID + "')";
자바스크립트 파일
function ToggleVisibility(elementID)
{
var element = document.getElementByID(elementID);
if (element.style.display = 'none')
{
element.style.display = 'inherit';
}
else
{
element.style.display = 'none';
}
}
물론 전환을 원하지 않고 버튼/라벨만 표시하려면 이에 따라 자바스크립트 메소드를 조정하세요.
여기서 중요한 점은 해당 정보를 보내야 한다는 것입니다. ClientID
클라이언트 측에서 조작하려는 컨트롤을 전역 변수를 설정하거나 내 예에서처럼 함수 매개변수를 통해 자바스크립트 파일에 추가합니다.
당신은 조심해야합니다 XSS 이런 일을 할 때:
document.getElementById('<%= Label1.ClientID %>').style.display
이 경우 누구도 Label1의 ClientID를 변조할 수 없을 가능성이 있지만 안전을 위해 다음 중 하나를 통해 해당 값을 전달하는 것이 좋습니다. AntiXss 라이브러리의 행동 양식:
document.getElementById('<%= AntiXss.JavaScriptEncode(Label1.ClientID) %>').style.display
이것이 내가 찾은 가장 쉬운 방법입니다.
BtnUpload.Style.Add("display", "none");
FileUploader.Style.Add("display", "none");
BtnAccept.Style.Add("display", "inherit");
BtnClear.Style.Add("display", "inherit");
Else에는 그 반대가 있으므로 표시도 처리합니다.이는 페이지의 로드 또는 페이지의 컨트롤을 새로 고치는 메서드에 포함될 수 있습니다.
페이지가 로드될 때까지 기다린 다음 버튼 표시를 없음으로 설정하면 작동합니다.그런 다음 나중에 표시되도록 할 수 있습니다.
Visible 속성이 true로 설정되어 있는지 확인하세요. 그렇지 않으면 컨트롤이 페이지에 렌더링되지 않습니다.그런 다음 스크립트를 사용하여 조작할 수 있습니다.