我必须在这里做错事,但我找不到一种方便的方法让它发挥作用。
想象一下以下代码:
<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;”的内容而不是我的常量定义。
这个的正确语法是什么?
答案 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