2010-09-23 20 views
5

'daki RadioButtonList için sabit olarak ayarlayın Burada yanlış bir şey yapmalıyım, ancak bunu işe almak için kolay bir yol bulamıyorum.ListItem değerini, ASPX

aşağıdaki kodu düşünün:

<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> 

Ama sayfasını oluşturduğunda önce deyimi derleme yapmaz. Yani bu radyo düğmesi listesinin seçili değerini alırsam, sabit tanımlarımın yerine "<% = Compan ...%>" gibi bir şey içerir.

Bunun için doğru sözdizimi nedir?

+0

bir dizeye dönüştürülür? Daha sonra bunun yerine "FREQUENT" ve "ONCE" değerini kolayca kullanabilirsiniz. Enum'a, diğer bir sınıf/ad alanı içinde olduğunda, aspire doğrudan erişilemediğini düşünüyorum. Ek: işaretlemede verileri değerlendirmek istediğinizde RadioButtonList'te DataBind'i çağırmayı düşünün. –

+0

1. Bunlar, sistem genelinde kullanılan sabitlerdir (oldukça büyüktür). Bu şekilde kolayca yönetilebilirler. 2. Eğer deyimi, Value özelliğine atamak yerine basitçe yazdırırsam, çalışır. 3. Kullanmıyorum bir veri kaynağı eklediğinizde, sadece bir liste veri. – Peter

+0

Ben de aynı sorunu yaşıyorum! – TinyRacoon

cevap

4

Neden tam olarak (bir başvuru bulmayı başaramadım) bilmiyorum ama <%= %> sözdizimi, ASPX işaretli bir Değer veya Metin Listesini ayarlayarak çalışmaz. Bu olabilir ASP.NET 2.0 beri

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

Yanlışlıkla bunu içeri almayı unuttular mı? Bu berbat :-) – Peter

+0

İşte neden çalışmadığına dair bir açıklama: http://stackoverflow.com/a/370263/12484 –

1

gerçekten işaretlemesinde (değil kodda kabul Yanıt başına arkasında) sabitleri isterseniz:

yerine gibi kod arkadan yapabilirdi özel bir ExpressionBuilder ile yapılır.

Öncelikle web uygulamasında bir ExpressionBuilder sınıf oluşturmak:

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

Ardından web.config kaydetmek:

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

Son olarak, <%$ %> sözdizimini kullanarak İşaretlemenize diyoruz:

<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> 

Kodun çoğunu buradan aldım:

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

MSDN ASP.NET İfadeler Bakış

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

MSDN ExpressionBuilder sınıfı başvurusu nereye onu aspx işaretlemesinde enum kullanmak istiyorsunuz Neden

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

İlgili konular