在ASPX中为RadioButtonList将ListItem值设置为常量

时间:2010-09-23 11:56:09

标签: asp.net

我必须在这里做错事,但我找不到一种方便的方法让它发挥作用。

想象一下以下代码:

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

但它在呈现页面之前不会编译语句。因此,如果我得到此radiobuttonlist的选定值,它包含类似“&lt;%= Compan ...%&gt;”的内容而不是我的常量定义。

这个的正确语法是什么?

2 个答案:

答案 0 :(得分:4)

我不知道原因究竟是什么(我没有设法找到引用)但是当您在ASPX标记中设置ListItem的值或文本时,<%= %>语法不起作用 - 起来。

您可以通过代码隐藏来实现,例如:

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

答案 1 :(得分: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