2017-09-08 6 views
5

otrzymuję komunikat o błędzie:należy użyć kodu po stronie serwera skryptów ograniczniki/wyrażenia ASP.NET wbudowane w elementy none-Asp

nie można utworzyć obiektu typu „System.Boolean” od swojego łańcucha reprezentacji < %: false%> dla właściwości "Widoczny".

Kiedy próbuję uruchomić ten kod w moim internetowej ASP.net:

<a runat="server" visible='<%: false %>' href="~/" >Home</a> 

Czy istnieje błąd składni? false powinien być wymieniony przez każdego wyniku metody samym z:

<asp:Panel runat="server" Visible='<%: GetTrueOrFalse() %>'>Home</a> 
+0

zobaczyć moją zaktualizowaną odpowiedź i niech owinąć go! –

Odpowiedz

1

Można również zadeklarować public boolean i używać. Trzeba będzie użyć DataBind() jeśli link jest poza GridView/Repetater itp

public bool isVisible = true; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    DataBind(); 
} 

Teraz można użyć, że na aspx.

<a runat="server" visible='<%# isVisible %>' href="~/">Home</a> 

Można jednak użyć operatora trójskładnikowego w oparciu o inną wartość zmiennej lub klasy w kodzie.

public int myValue = 11; 
public Book myBook = new Book() { category = "Fantasy" }; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    DataBind(); 
} 

Teraz można ustawić widoczność w oparciu o myValue, mimo że nie jest logiczna.

<a runat="server" visible='<%# myValue > 10 ? true : false %>' href="~/">Home</a> 

//or 

<a runat="server" visible='<%# myBook.category == "Fantasy" ? true : false %>' href="~/">Home</a> 
+0

Nie ma metody "DataBind();" do wywołania – Toshi

+0

Tak, jest. Kontrola strony ma tę metodę ('Page.DataBind()' lub 'this.DataBind()' są takie same jak 'DataBind()') – VDWWD

2

Załóżmy, że masz metodę, która zwraca bool wartość tak:

public bool IsVisible() 
{ 
    if (some_condition) // example condition test 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

Trzeba użyć wiązania tak:

ASPX

<a runat="server" visible='<%# IsVisible() %>' href="~/" >Home</a> 

ASPX.CS (Code-tył)

protected void Page_Load(object sender, EventArgs e) 
{ 
    // do something 

    Page.DataBind(); 
} 

NB: Ta sztuczka zastosowanie zarówno dla metody lub właściwości, która zwraca bool.

Aktualizacja 1:

Od a szablon nie określa żadnego id atrybut, można usunąć runat="server":

<a visible='<%# IsVisible() %>' href="~/" >Home</a> 

Albo użyć CSS z display: none lub visibility: hidden:

<a visible='<%# IsVisible() %>' href="~/" style="visibility:hidden; display:none;">Home</a> 

Dotyczy:

Is code rendering block <%=%> useful for boolean type?

+0

ok teraz nie ma już błędu, ale nie znika – Toshi

+0

Co nie zniknie? Proszę o przedstawienie dalszych szczegółów. –

+0

element 'a' nie wyświetla się, gdy piszę' public bool IsVisible() {return false; } 'i dodaj wywołanie metody do' visible = "" ' – Toshi

1

Naucz się tej techniki, której będziesz używać bardzo często. Kontrolki po stronie serwera lub kontenery mogą być łatwo modyfikowane po stronie serwera. W jaki sposób? dobrze zrobiłeś pierwszą część prawo go dziczyzny runat="server" teraz wszystko co musisz zrobić, to dać mu identyfikator tak to wygląda mniej więcej tak Nazwijmy MyLink id

<a runat="server" id="MyLink" href="~/" >Home</a> 

-Teraz zauważyliście, że usunęliśmy atrybut Widoczny. tak, ponieważ teraz przejmiemy pełną kontrolę nad tym po stronie serwera. Załóżmy, że chcesz zacząć od strony za pierwszym razem z ukrytym, dobrze, że to proste: w twoim zdarzeniu pageload użyjemy dobrej techniki, aby stwierdzić, że kod, który napiszemy, uruchomi się tylko raz przy pierwszym załadowaniu.

protected void Page_Load(object sender, EventArgs e) 
    { 

     //this condition means if is not post back (meaning the very first time only) 

     if(!IsPostBack) 
      { 
      MyLink.Visible = false; 
      } 
    } 

Teraz masz to po prostu można dokonać kontrola ponownie widoczne ilekroć gdziekolwiek chcesz po prostu

MyLink.Visible = true; 

i zrobione. Jeśli wiesz, potrzebujesz więcej pomocy!

jeśli chcesz robić to inline jest to wartość ciągu nie bool więc należy owinąć je w cudzysłów visible='<%: "false" %>' < = zauważysz „”

2

Użycie tej składni spowoduje zwiększenie powyższego błędu analizatora składni. Poprawną składnią wartości kontrolnych serwera wiążących dane jest <%# ... %>. Inline expression's more detail is here.


I można to zrobić w inny sposób:

<% if(GetTrueOrFalse()) { %> 
    <a ID="alink" runat="server" href="~/" >Home</a> 
    //... other code 
<% } %> 
Powiązane problemy