2010-09-23 64 views
5

我必須在這裏做錯了事,但找不到一個簡單的方法來使其工作。將ListItem值設置爲ASPX RadioButtonList中的常量

想象一下下面的代碼:

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

但它呈現頁面之前,不會編譯語句。因此,如果我得到這個單選按鈕列表的選定值,它將包含類似「<%= Compan ...%>」的內容,而不是我常量定義的內容。

這是什麼正確的語法?

+0

你想去的地方它使用枚舉在ASPX標記爲什麼被轉換成一個字符串?然後,您可以輕鬆使用「FREQUENT」和「ONCE」作爲值。我認爲當它位於其他類/名稱空間時,無法直接從aspx訪問枚舉。 另外:當您想要評估標記中的數據時,考慮在RadioButtonList上調用DataBind。 – 2010-09-23 12:27:12

+0

1.這些是在整個系統中使用的常量(它非常大)。這樣他們很容易管理。 2.如果我只是打印語句,而不是將它分配給Value屬性,它就可以工作。 3.當你附加一個數據源時,你只需要綁定一個列表,我不使用它。 – Peter 2010-09-23 12:34:14

+0

我的確有同樣的問題! – TinyRacoon 2016-04-26 13:21:06

回答

4

我不知道爲什麼(我沒有設法找到引用),但當您在ASPX標記中設置ListItem的值或文本時,<%= %>語法不起作用。

你可以,而不是從代碼隱藏做到這一點,如:

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

他們不小心把這個放進了什麼東西?這很糟糕:-) – Peter 2010-09-23 12:48:02

+0

下面是它爲什麼不起作用的解釋:http://stackoverflow.com/a/370263/12484 – 2016-04-29 12:55:01

1

如果你真的想要的常量標記(不是每個代碼接受的答案後面),因爲ASP.NET 2.0中,可以用自定義的ExpressionBuilder完成。

首先,在你的web應用程序創建的ExpressionBuilder類:

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

然後在你的web.config中註冊:

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

最後,調用它在使用<%$ %>語法您的標記:

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

我從這裏得到了大部分的代碼:

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

MSDN ASP.NET表達式概述

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

MSDN的ExpressionBuilder類參考

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

相關問題