2010-09-23 10 views
5

Constant zu sein Ich muss hier etwas falsch machen, aber ich kann einen einfachen Weg finden, um dies zum Funktionieren zu bringen.Set ListItem Wert für RadioButtonList in ASPX

Stellen Sie sich den folgenden Code ein:

<asp:RadioButtonList ID="MyRadioButtonList" runat="server"> 
    <asp:ListItem Value="<%= CompanyName.SystemName.Constants.PaymentFrequency.FREQUENT.ToString() %>" Text="Yes" Selected="True"></asp:ListItem> 
    <asp:ListItem Value="<%= CompanyName.SystemName.Constants.PaymentFrequency.ONCE.ToString() %>" Text="No, Just do this once"></asp:ListItem> 
</asp:RadioButtonList> 

Aber es ist nicht die Aussage zusammenstellen, bevor er die Seite macht. Wenn ich also den ausgewählten Wert dieser Radiobuttonliste erhalte, enthält er etwas wie "<% = Compan ...%>" anstelle dessen, was meine Konstante definiert.

Wie lautet die korrekte Syntax?

+0

Warum wollen Sie das Enum in der aspx Markup, wo es verwendet werden soll Wird in eine Zeichenfolge umgewandelt? Dann könnten Sie einfach "FREQUENT" und "ONCE" als Wert verwenden. Ich denke, es ist nicht möglich, direkt von der aspx auf die enum zuzugreifen, wenn sie sich in einer anderen Klasse/einem anderen Namespace befindet. Zusätzlich: Erwägen Sie, DataBind in der RadioButtonList aufzurufen, wenn Sie Daten im Markup auswerten möchten. –

+0

1. Dies sind Konstanten, die im gesamten System verwendet werden (es ist ziemlich groß). Auf diese Weise sind sie leicht zu handhaben. 2. Wenn ich die Anweisung einfach drucke, anstatt sie der Eigenschaft Value zuzuweisen, funktioniert sie. 3. Sie können nur eine Liste erstellen, wenn Sie eine Datenquelle anhängen, die ich nicht verwende. – Peter

+0

Ich habe genau das gleiche Problem! – TinyRacoon

Antwort

4

Ich weiß nicht, warum genau (ich habe es nicht geschafft, eine Referenz zu finden), aber die <%= %> Syntax funktioniert nicht, wenn Sie den Wert oder den Text eines ListItem, in ASPX-Markup.

könnten Sie stattdessen tun es aus dem Code-behind, wie:

MyRadioButtonList.Items.Add(new ListItem(
    "Yes", CompanyName.SystemName.Constants.PaymentFrequency.FREQUENT.ToString())); 
//... 
+2

Sie haben versehentlich vergessen, dies oder etwas zu tun? Das saugt :-) – Peter

+0

Hier ist eine Erklärung, warum es nicht funktioniert: http://StackOverflow.com/A/370263/12484 –

1

Wenn Sie wirklich die Konstanten in Markup (nicht im Code hinter pro die akzeptierte Antwort) wollen, da ASP.NET 2.0 das sein kann getan mit einem benutzerdefinierten ExpressionBuilder.

zuerst eine Klasse Expression in Ihrer Web-Anwendung erstellen:

namespace Your.Namespace 
{ 
    [ExpressionPrefix("Code")] 
    public class CodeExpressionBuilder : ExpressionBuilder 
    { 
     public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, 
      object parsedData, ExpressionBuilderContext context) 
     { 
      return new CodeSnippetExpression(entry.Expression); 
     } 
    } 
} 

Dann registrieren Sie es in Ihrem web.config:

<compilation debug="true"> 
    <expressionBuilders> 
    <add expressionPrefix="Code" type="Your.Namespace.CodeExpressionBuilder"/> 
    </expressionBuilders> 
</compilation> 

Schließlich nennen es in Ihrem Markup die <%$ %> Syntax:

<asp:RadioButtonList ID="MyRadioButtonList" runat="server"> 
    <asp:ListItem Value="<%$ Code: CompanyName.SystemName.Constants.PaymentFrequency.FREQUENT.ToString() %>" Text="Yes" Selected="True"></asp:ListItem> 
    <asp:ListItem Value="<%$ Code: CompanyName.SystemName.Constants.PaymentFrequency.ONCE.ToString() %>" Text="No, Just do this once"></asp:ListItem> 
</asp:RadioButtonList> 

Ich habe den Großteil des Codes von hier:

http://weblogs.asp.net/infinitiesloop/The-CodeExpressionBuilder

MSDN ASP.NET Expressions Übersicht

https://msdn.microsoft.com/en-us/library/d5bd1tad.aspx

MSDN Expressionklassenreferenz

https://msdn.microsoft.com/en-us/library/system.web.compilation.expressionbuilder(v=vs.110).aspx