c# - 使用常量字符串作为 ASP.net Webforms 控件的 ID

标签 c# asp.net webforms

您知道,如果您正在使用 Repeater Controls,您将无法以通用方式访问控件(据我所知)。因此,我们尝试在大多数情况下使用 const 字符串,我们必须在 C# 中使用字符串。

所以我创建了一个包含 const 字符串的类。它们定义中继器内控件的 ID 名称。这使得以比在代码中使用纯字符串更通用的方式访问控件成为可能。示例:

public class FormularRepeaterFieldIDs
{
    public const string RubrikLiteral = "BuchungRubrikLiteral";
    public const string RubrikDropDownList = "BuchungRubrikList";
    public const string RubrikIdHiddenField = "BuchungRubrikIdHidden";
}

它允许这样的访问(当然你可以为此做一个更简单的访问包装器):

                Literal rubrikLiteral = (Literal)e.Item.FindControl(TimeExpressHelper.FormularRepeaterFieldIDs.RubrikLiteral);
                rubrikLiteral.Visible = false;

现在我也很乐意在 Webforms 前端代码中使用预定义的 ID。目前看起来是这样的:

<asp:Literal ID="BuchungRubrikLiteral" Text='<%#Eval("strRubrik")%>' runat="server" />

有没有可能做出这样的东西?

<asp:Literal ID="<% FormularRepeaterFieldIDs.RubrikLiteral %>" Text='<%#Eval("strRubrik")%>' runat="server" />

最佳答案

您或许可以使用自定义 ExpressionBuilder 来完成这项工作.像这样的东西:

  <asp:Literal ID="<%$ Const:FormularRepeaterFieldIDs.BuchungRubrik" 
     Text='<%#Eval("strRubrik")%>' runat="server" />

使用 Reflection 和/或 CodeSnippetExpression 来读取值的 ExpressionBuilder:

  class ConstExpressionBuilder : ExpressionBuilder {
       override bool SupportsEvaluate { get { return true; } }

       override CodeExpression GetCodeExpression(BoundPropertyEntry entry, ...) {
           return new CodeSnippetExpression(entry.Expression);
       }

       override object EvaluateExpression(BoundPropertyEntry entry, ...) {
           var splitExpression = entry.Expression.Split('.');
           var fieldName = splitExpression.Last();
           var typeName = entry.Expression.Substring(entry.Expression.Length - fieldName.Length - 1);
           var type = Type.GetType(typeName);
           return type.GetField(fieldName).GetValue(null);
       }
  }

和一个 web.config 来注册它来处理 Const 前缀:

  <expressionBuilders>
     <add expressionPrefix="Const" type="ConstExpressionBuilder" />
  </expressionBuilders>

或者,您可以利用现有的 ResourceExpressionBuilder ,并使它们成为资源而不是常量。

关于c# - 使用常量字符串作为 ASP.net Webforms 控件的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11153258/

相关文章:

c# - asp.net如何获取客户端的mac地址?

c# - .net 中的小数百分比符号

C# 证书搜索 - 为什么 Win View 工具中的序列号不起作用

c# - 如何使用 jquery 在不刷新页面的情况下刷新 View 组件

javascript - 在没有回发的情况下从 LinkBut​​ton 调用 C# 方法(使用 PageMethod)(MasterPage 网站)

php - 使用 PHP Filter 函数进行验证,但忽略空的非必填字段

asp.net - 做 ASP.NET 时如何决定哪个是正确的,WebForms 还是 MVC

c# - 设置处理器关联性和 TPL

c# - 如何在 C# 中为动态下拉列表创建事件处理程序

c# - 如何在不依赖于实现的情况下使用接口(interface)的实现?