1

我有 asp.net 应用程序,其中有可编辑的网格视图,其中包含编辑、删除、添加选项。这个网格有像往常一样的模板字段。我还有一个具有静态字符串变量的静态类。我想将这些静态变量的值保留为模板字段的标题文本。所以我通过以下方式导入了我的常量类的命名空间:

<%@ Import Namespace="ConstantManagerNamespace" %>

然后我尝试了同一列:

1. <asp:TemplateField HeaderText=<%=ConstantManager.Name%>>

2. <asp:TemplateField HeaderText='<%=ConstantManager.Name%>'>

3. <asp:TemplateField HeaderText=<% ConstantManager.Name %>>

4. <asp:TemplateField HeaderText='<% ConstantManager.Name%>'>

  all probable syntax to access my constant variable value but

我得到解析器错误:

Literal content ('<asp:TemplateField HeaderText=') is not allowed within a 'System.Web.UI.WebControls.DataControlFieldCollection'.

这个怎么做 ?

4

2 回答 2

0

最好在 GridView RowDataBound 事件中绑定静态类变量,

检查行类型是标题,即。

 if (e.Row.RowType == DataControlRowType.Header)
    {
       e.Row.Cells[0].Text = ConstantManager.Name;                  
    }
于 2011-04-27T07:02:43.817 回答
0

出现问题是因为您试图将服务器端控件/值嵌入到另一个服务器端控件中。这在 asp.net 中是不可能直接实现的,除非您使用数据绑定或自定义表达式生成器。

对于您的确切情况,您需要创建一个自定义表达式构建器,它从您的静态类返回值。

最终结果应如下所示:

<asp:TemplateField HeaderText="<$ ConstantManager:Name >">

只要您定义了带有"ConstantManager"前缀的自定义表达式构建器,就绝对允许使用 aspx 文件。

可以在此处找到创建自定义表达式构建器的实际示例:ExpressionBuilder 类

补充

另外,我认为数据绑定也会起作用,但在我看来,这不是这种情况的确切解决方案。

只需在 aspx 标记中使用此语法:

<asp:TemplateField HeaderText="<# ConstantManager.Name >">

并且,在页面加载时,调用:

protected void Page_Load(object sender, System.EventArgs e)
{
    this.DataBind();
}

由于部分原因,我个人不喜欢这个解决方案Page_Load。无论如何,如果与自定义表达式相比,这不需要任何特殊的声明/编码。

我希望这有帮助!

于 2011-03-25T07:10:10.597 回答