2013-09-23 4 views
24

W moich ASP .NET Web Forms Mam następujący kod deklaratywny:Web Forms komunikat o błędzie: „Nie jest to skrypty będzie wysyłany jako zwykły tekst”

<asp:TextBox runat="server" ID="txtbox" CssClass='<%=TEXTBOX_CSS_CLASS%>' /> 

Stała TEXTBOX_CSS_CLASS jest zdefiniowany w bazie klasa widoku Kod z opóźnieniem dziedziczy z klasy:

public class MyPageBase : Page 
{ 
    protected internal const string TEXTBOX_CSS_CLASS = "myClass"; 
} 

kompilator edit-razem jednak ostrzega mnie, że „to nie jest skrypty [sic] wyjście będzie jako zwykły tekst.”. Zgodnie z jego słowem, klasa css jest renderowana jako dosłownie "<% = TEXTBOX_CSS_CLASS%>".

Co oznacza ten komunikat o błędzie i czy istnieje obejście problemu, aby nadal używać stałej w klasie bazowej?

Odpowiedz

27

Nie można używać <%= ... %> ustawić właściwości kontrole po stronie serwera. Wyrażenia w wierszu <% %> można używać tylko na stronie głównej aspx lub poziomie kontrolki użytkownika, ale nie można ich osadzić w atrybucie znacznika sterowania serwera (na przykład <asp:Button... Text =<% %> ..>).

Jeśli twój TextBox znajduje się wewnątrz formantu DataBound, takiego jak GridView, ListView .., możesz użyć składni: <%# %>. LUB możesz zadzwonić jawnie DataBind() na formant ze skryptu z serwera lub wbudowanego skryptu serwera.

<asp:TextBox runat="server" ID="txtbox" class='<%# TEXTBOX_CSS_CLASS %>' /> 

// kod związany z pliku

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

ASP.NET zawiera kilka wbudowanych w budowniczych ekspresyjnych, które pozwala wyodrębnić niestandardowe ustawienia aplikacji i informacji ciąg połączenia z pliku web.config. Przykład:

  • Resources
  • connectionStrings
  • AppSettings

Tak więc, jeśli chcesz odzyskać ustawienie aplikacji o nazwie className od części <appSettings> pliku web.config, można użyć następującego wyrażenia :

<asp:TextBox runat="server" Text="<%$ AppSettings:className %>" /> 

Powyższy fragment nie jest jednak standardem do odczytu nazw klas z Appsettings.

można budować i użyć swój własny ExpressionBuilders lub za pomocą kodu jako:

txtbox.CssClass = TEXTBOX_CSS_CLASS; 

Check this link na budowaniu budowniczych Niestandardowe wyrażenie. Po zbudowaniu niestandardowego wyrażenia można wyświetlić wartość, taką jak:

<asp:TextBox Text="<%$ SetValue:SomeParamName %>" 
    ID="setting" 
    runat="server" /> 
14

Problem polega na tym, że nie można mieszać elementów sterujących runat=server z blokami kodu <%= .. %>. Poprawnym sposobem byłoby użycie kodu z tyłu: txtbox.CssClass = TEXTBOX_CSS_CLASS;.

7

To zadziała.

Mark się

<asp:TextBox runat="server" ID="txtbox" class='<%# TEXTBOX_CSS_CLASS %>' /> 

Code-za

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     txtbox.DataBind(); 
    } 
} 

Ale jej o wiele czystsze, aby uzyskać dostęp własność asp:TextBoxCssClass na Page_Load

+0

Skąd się bierze ta dziwna składnia <% #? – spankmaster79

+1

@ spankmaster79: przeczytaj powyższą odpowiedź, aby uzyskać szczegółowe wyjaśnienie. – naveen

Powiązane problemy