2010-05-28 5 views
1

J'ai le problème suivant. J'ai une page ASPX sans databound et la syntaxe suivante:Asp.net: utilisation de <% # ou <%

<asp:label runat=server.... text='<%# MyFunction("parameter") %>' /> 

MyFunction est déclarée comme suit:

protected function MyFunction(par as string) as string 
    if par = "1" then 
    MyFunction="something" 
    else 

    end if 
end function 

Mais ASP.NET ne pas évaluer myfunction.

Qu'est-ce qui ne va pas?

Répondre

2

<%# est utilisé pour les expressions de liaison de données. Généralement, vous verrez <%# Eval("FieldName") %>. Si vous essayez d'appeler une méthode définie dans votre code-behind, vous devez utiliser <%= MyFunction("param") %>

Cela étant dit ... vous devriez envisager une approche différente. Il serait préférable de faire quelque chose comme suit (en utilisant votre exemple existant):

<asp:label name="MyLabel" runat="server" /> 

ainsi que les éléments suivants dans votre code-behind:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load 
    MyLabel.Text = MyFunction("param") 
End Sub 

Protected Function MyFunction(par as string) as string 
    if par = "1" then 
    MyFunction="something" 
    else 

    end if 
End Function 

Cette approche garantit que votre déclaration de l'interface utilisateur ne sait rien des méthodes définies sur votre code-behind, augmentant la maintenabilité globale de votre système.

+0

mmm .. cela ne fonctionne pas. En html, il renvoie la chaîne <% = MyFunction ("param")%> – stighy

+0

@stighy: c'est parce que je n'ai pas remarqué au début que c'est dans la déclaration d'étiquette. Ça ne marchera jamais comme ça. Vous devrez utiliser l'approche que j'ai décrite dans mon édition. – Randolpho

+0

Ok, j'ai résolu .. si j'utilise <%= ...%> à l'intérieur d'un contrôle (étiquette, littéral), il renvoie la chaîne. Mais si vous l'utilisez de manière autonome, sans "lier" la propriété textuelle d'un contrôle, cela fonctionne. Thnks Randolpho! – stighy