【问题标题】:Why does databound property of ASP.NET usercontrol work only without quotes?为什么 ASP.NET 用户控件的数据绑定属性只能在没有引号的情况下工作?
【发布时间】:2026-02-11 18:25:06
【问题描述】:

我有一个完全在代码隐藏中实现的自定义 ASP.NET 用户控件。该控件有一个字符串属性,其声明性标记如下所示:

<uc:MyControl ImageUrl="/Content/images/" runat="server" />

实际的声明很可能会使用如下的数据绑定语法:

<uc:MyControl ImageUrl="<%# PageInfo.ImageUrl %>" runat="server" />

现在这是与我的问题有关的奇怪部分。如果我使用上述语法,则数据绑定不起作用,并且 ImageUrl 在运行时的值是引号之间的字符串文字。但是,如果我删除双引号,它会按预期工作:

<uc:MyControl ImageUrl=<%# PageInfo.ImageUrl %> runat="server" />

双引号和单引号都会发生相同的行为。我对此感到困惑,虽然代码正在运行,但它确实不是最佳的,因为将值放在引号中是常态,并且使数据绑定工作的方法显然是非正统的。

有人知道为什么这只在没有引号的情况下有效吗?

【问题讨论】:

  • PageInfo.ImageUrl 是否已数据绑定到您的自定义控件?
  • PageInfo.ImageUrl 是我在示例中绑定到我的控件的 ImageUrl 属性的任意属性。我可以在那里使用其他任何东西(例如 Request.QueryString)并且行为是相同的。
  • 你试过了吗? ImageUrl="" runat="server" /> -- 或者在后面的代码中设置属性怎么样?给你的 uc:MyControl 一个 ID,这样你就可以了?
  • 我使用的数据绑定语法是正确的。您提出的语法将不起作用,因为它是 Response.Write 的快捷方式,而不是数据绑定的快捷方式。我的问题不是关于如何设置属性的值,我当然可以通过多种方式进行。

标签: asp.net data-binding user-controls properties


【解决方案1】:

我发现了问题...它与文件有关(可能是编码,但不确定)。一时兴起,我将代码复制到一个新文件并删除了原始文件。现在数据绑定可以正常使用引号了。

【讨论】:

    最近更新 更多