2008-11-05 31 views
15

Về cơ bản tôi muốn biết cách tốt nhất để ẩn/hiển thị điều khiển ASP.NET từ một hàm Javascript. Tôi đã tìm thấy tôi sẽ chỉ truy cập vào điều khiển trong Javascript bằng cách sử dụng:Làm cách nào để bạn đặt thuộc tính "Hiển thị" của điều khiển ASP.NET từ một hàm Javascript?

var theControl = document.getElementById("txtEditBox"); 

Sau đó, chỉ cần đặt thuộc tính Có thể nhìn thấy của điều khiển thành true/false. Nó không có vẻ là làm việc, tôi dường như không thể tìm ra cách để thiết lập "Visible" thành true/false. Làm thế nào tôi có thể làm điều đó? Ngoài ra, đó là cách tốt nhất để ẩn/hiện một điều khiển ASP.NET từ một hàm Javascript?

Cảm ơn, Jeff

+0

Tại sao tất cả những người trả lời nhận được thổi với downvotes? –

+1

Tôi downvoted một vài người trong số họ bởi vì họ không có gì nhiều hơn những người đến trễ lặp đi lặp lại những gì đã được một vài người nói, và họ thậm chí không quan tâm để trả lời tất cả các câu hỏi của OP mà chỉ bắn một câu trả lời một lần. Câu trả lời của câu hỏi này phức tạp hơn el.style.display = 'none' –

+0

Câu trả lời lặp đi lặp lại cách nhau khoảng một phút. Chúng tôi đều đang xây dựng câu trả lời cùng một lúc. –

Trả lời

24

Các "Visible" tài sản của một điều khiển ASP.NET xác định có hay không nó sẽ được trả lại trên máy khách (ví dụ gửi cho khách hàng). Nếu nó là sai khi trang được hiển thị, nó sẽ không bao giờ đến khách hàng.

Vì vậy, về mặt kỹ thuật, bạn không thể đặt thuộc tính của điều khiển đó.

Điều đó nói rằng, nếu kiểm soát được render trên máy khách vì thuộc tính Visible là đúng khi trang được trả lại, bạn có thể sau đó giấu nó bằng javascript như thế này:

var theControl = document.getElementById("txtEditBox"); 
theControl.style.display = "none"; 

// to show it again: 
theControl.style.display = ""; 

Đó là giả định rằng thuộc tính id của control thực sự là "txtEditBox" trên máy khách và nó đã được nhìn thấy.

Ngoài ra, đó là cách tốt nhất để ẩn/hiện điều khiển ASP.NET khỏi hàm Javascript?

Không nhất thiết phải là một cách "tốt nhất", mặc dù một tốt hơn phương pháp là sử dụng các định nghĩa lớp CSS:

.invisible { display: none; } 

Khi bạn muốn ẩn một cái gì đó, tự động áp dụng lớp đó để các phần tử; khi bạn muốn hiển thị lại, hãy xóa nó. Lưu ý, tôi tin rằng điều này sẽ chỉ hoạt động đối với các phần tử có giá trị display bắt đầu là block.

+0

Các tùy chọn khác cho "style.display" là gì? Làm thế nào để hiển thị lại nó? – Yttrium

+0

Tôi đã cập nhật câu trả lời ... –

+0

Không có đầu mối ... nhưng cảm ơn vì đã chỉ ra sự sao chép điên rồ ... Tôi đã xóa bản sao của mình: P –

5

thay vì sử dụng có thể nhìn thấy, thiết css của nó để display: none

//css: 
.invisible { display:none; } 

//C# 
txtEditBox.CssClass = 'invisible'; 
txtEditBox.CssClass = ''; // visible again 

//javascript 
document.getElementById('txtEditBox').className = 'invisible' 
document.getElementById('txtEditBox').className = '' 
3

này nên giấu sự kiểm soát:

theControl.style.display = 'none'; 
+0

Tính năng này thêm gì? Mọi người khác đã lặp lại điều này, quảng cáo nauseum. Điều này chỉ thêm nhiều lộn xộn hơn vào trang. –

+0

Chưa kể, nó thậm chí không thực sự trả lời tất cả các câu hỏi của ông. Hãy thử xây dựng một phản ứng dài hơn, nhiều suy nghĩ hơn trong thời gian tới thay vì hy vọng một lần cho các điểm danh tiếng. –

+0

Ồ, bạn là một anh chàng VB ... giải thích nó. : P –

5

Đặt phong cách để "display: none".

var theControl = document.getElementById("<%= txtEditBox.ClientID %>"); 
theControl.style.display = "none"; 
+0

Đó là "txtEditBox.ClientID" là một liên lạc quan trọng - nếu nó là runat = "server", bạn sẽ cần nó mỗi lần.+1 – ojrac

+0

Bạn không cần nó mỗi lần - bạn chỉ cần nó nếu điều khiển không trực tiếp trong trang không có trang chính. Nếu nó nằm trên một trang ASPX đơn giản, ID sẽ vẫn giữ nguyên. –

+0

Bạn nói đúng ... Tôi thường sử dụng ASP.NET Master pages ... + 1 –

3

Bạn có thể sử dụng thuộc tính hiển thị cho mục này. Nhưng như Jason đã lưu ý, đây là thuộc tính DHTML DOM (phía máy khách) hoàn toàn độc lập với thuộc tính có thể nhìn thấy của ASP.NET (phía máy chủ) có thể điều khiển hiển thị.

theControl.style.display = "none"; 

Display Property

1

Bạn muốn thiết lập thuộc tính phong cách hiển thị để 'none' (ẩn) hoặc null để hiển thị.

var theControl = document.getElementById("txtEditBox"); 

    theControl.style.display = 'none'; 

    theControl.style.display = null; 

Làm điều đó một cách jQuery:

$('#txtEditBox').hide(); 

    $('#txtEditBox').show(); 
3

Bạn không thể ẩn/hiển thị các phiên bản ASP.NET của sự kiểm soát như rằng chỉ tồn tại trong một bối cảnh máy chủ. Để sử dụng JavaScript, bạn cần phải chơi với trạng thái điều khiển/trạng thái hiển thị.

duy nhất loại-cách để làm điều đó sẽ được quấn kiểm soát trong một UpdatePanel và có một cái gì đó như thế này:

<asp:UpdatePanel ID="panel" runat="server"> 
    <ContentTemplate> 
    <asp:TextBox ID="myTextBox" runat="server" /> 
    </ContentTemplate> 
    <Triggers> 
    <asp:AsynchronousPostbackTrigger ControlID="button" EventName="Click" /> 
    </Triggers> 
</asp:UpdatePanel> 
<asp:Button ID="button" runat="server" OnClick="toggle" Text="Click!" /> 

Sau đó, bạn cần điều này trong mã của bạn đằng sau:

protected void toggle(object sender, EventArgs e){ 
    myTextBox.Visibility = !myTextBox.Visibility; 
} 

Bây giờ, khi bạn bấm vào nút một postback async xảy ra và nó sẽ làm mới UpdatePanel.

Lưu ý: Đây không phải là một giải pháp tốt , vì nó sẽ là một yêu cầu AJAX rất nặng nề, bởi vì bạn cần phải nộp ViewState.

Ngoài ra, nó có thể không đúng 100%, tôi đã làm điều đó từ bộ nhớ.

+0

Holy crap - nói về việc đi đường về nhà! –

+0

Hey, không bao giờ nói đó là một giải pháp TỐT, chỉ là một giải pháp hoàn toàn .NET;) Nếu bạn không sử dụng display = "none" thì bạn là một kẻ ngốc! Tôi chỉ thấy rằng mọi giải pháp đã được giảm xuống, nghĩ rằng có thể một giải pháp ASP.NET thuần túy đã được yêu cầu: P –

+0

Điều đáng sợ là bạn và tôi biết đây không thực sự là một cách hay để thực hiện, nhưng Tôi sẵn sàng đặt cược một người nào đó sẽ thấy giải pháp của bạn và nghĩ rằng "Này, đó là một cách tuyệt vời để làm điều đó - không có JavaScript !!!" - những người đó làm tôi sợ. :) –

1

Hoặc nếu bạn không muốn sử dụng css:

<asp:TextBox ID="txtBox" runat="server" style="display:none;"> 
Các vấn đề liên quan