2017-08-02 17 views
5
<%@ Page Language="C#" %> 

<!DOCTYPE html> 

<script runat="server"> 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     myTr.Visible = false; 
     mySpan.Visible = false; 
    } 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <table runat="server"> 
      <tr id="myTr"> 
       <td>Hello</td> 
       <td><span id="mySpan">World</span></td> 
      </tr> 
      <tr> 
       <td>Hi</td> 
       <td>Bye</td> 
      </tr> 
     </table> 
    </form> 
</body> 
</html> 

Wskazówka myTr i mySpanoba nie mają runat = server, ale tylko kompilator daje błąd na mySpan.Visible = false.Dlaczego mogę uzyskać dostęp do elementu HTML bez uruchamiania programu runat = server od strony serwera?

enter image description here

Dlaczego nie błąd kompilatora raportu na myTr.Visible = false?

Odpowiedz

1

Domyślam się, że jesteś w stanie uzyskać dostęp do swojej tr, ponieważ tabela działa na serwerze, a tr jest częścią samej tabeli.

Po drugiej stronie, element span jest dostępny tylko od klienta, ponieważ nie został wyrenderowany po stronie serwera.

jeśli dodasz identyfikator do jakiegoś td do tabeli, będziesz mógł uzyskać do niego dostęp również po stronie serwera. Jednak jeśli usuniesz runat="server" ze stołu, otrzymasz błąd kompilacji podczas próby uzyskania dostępu do składników tabeli.

<table runat="server"> 
    <tr id="myTr"> 
     <td id="myTd">Hello</td> <%--This td is also accessible from the server script--%> 
     <td><span id="mySpan">World</span></td> 
    </tr> 
</table> 

UPDATE: OK, to już nie jest przypuszczenie. Według wielkiego wyjaśnienia Michaela Amundsena i Paula Litwina w ich książce ASP.NET for Developers. Możesz zobaczyć przyczynę.

Podsumowując tutaj, jak na swój komentarz także: Na stronie 136, podtytuł: Tabela Header (Th), Hałas (Tr) i Detail (Td) mówi: Można również użyć kodu po stronie serwera manipuluj znacznikami th, tr i td tabeli. Listing 8.9 Manipulowanie znacznikami Th, Tr i Td przy użyciu kodu po stronie serwera jest bardzo podobny do twojego.

Zasadniczo stole z runat="server" i th, tr i td elementów z atrybutami id (tylko nie runat = „server”), które są faktycznie dostępne z obsługi Page_Load wydarzeniu na górze aukcji.

Jeśli będziesz czytać dalej, zobaczysz wyjaśnienie dotyczące kontroli serwera i sposobu, w jaki program ASP.NET dopasowuje je do elementów HTML.

Mam nadzieję, że to pomoże!

+0

Książka nie mówi, dlaczego możemy uzyskać dostęp do elementu bez runat = server, chyba że jestem ślepy. Czy możesz uczciwie wykorzystać tę część w swojej odpowiedzi? – Gqqnbig

+0

@LoveRight Na stronie 136, podtytuł: Nagłówek tabeli (Th), Wiersz (Tr) i Szczegół (Td), mówi: Możesz także użyć kodu po stronie serwera do manipulowania znacznikami th, tr i td tabeli. Listing 8.9: Manipulowanie znacznikami Th, Tr i Td przy użyciu kodu po stronie serwera jest bardzo podobny do twojego. Zasadniczo tabela z runat = "server" oraz th, tr i td z atrybutami id only (nie runat = "server"), które są efektywnie dostępne z obsługi zdarzenia Page_Load na górze listy. Jeśli będziesz czytać dalej, zobaczysz wyjaśnienie dotyczące kontrolek serwera i sposobu, w jaki program ASP.NET dopasowuje je do elementów HTML. –