【问题标题】:Dynamically assigning properties on a non data bound ASP.NET control在非数据绑定 ASP.NET 控件上动态分配属性
【发布时间】:2010-03-19 00:32:51
【问题描述】:

例如,假设我有一个超链接:

<asp:HyperLink runat="server" Text="Foo" NavigateUrl="foo.aspx" />

如何在服务器端设置 NavigateUrl,而无需进行代码隐藏?

这当然行不通:

<asp:HyperLink runat="server" Text="Foo" NavigateUrl="<%= urlString %>" />

(其中 urlString 可能是我在页面前面创建的字符串)

这不起作用,因为超链接不在数据绑定控件中:

<asp:HyperLink runat="server" Text="Foo" NavigateUrl='<%# urlString %>' />

我想我可以只使用标准的锚元素:

<a href="<%= urlString %>">Foo</a>

但我不希望将 HTML 和 ASP.NET 控件混为一谈,如果能够为其他控件做到这一点会很方便。

肯定有办法吗?

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    尝试在内联代码块中设置属性:

    <asp:HyperLink runat="server" ID="MyLink" Text="Foo"  />
    <% MyLink.NavigateUrl="foo.aspx"; %>
    

    【讨论】:

      【解决方案2】:

      这当然行不通:

      当然可以。

      这不起作用,因为 超链接不在数据绑定范围内 控制:

      将页面视为您的数据绑定控件。 你需要调用它的 DataBind 方法。

      Page.DataBind();
      

      也许您还需要添加一个 ID 属性。如果这不起作用,请尝试显示属性而不是变量。

      【讨论】:

      • 其实第一个例子是行不通的。我刚刚又测试了一遍。它输出 "" 作为 href,所有的 HTML 编码都很好。不过会尝试 Page.DataBind() 选项,谢谢。
      • Page.DataBind() 很好用,谢谢。不过我想知道,我应该关心这里的效率吗?假设您在页面上有一堆数据绑定控件; GridViews、Repeaters 等等。如果我显式调用 Page.DataBind() ,ASP.NET 最终会绑定这些控件(并可能调用 DB)两次吗?
      猜你喜欢
      • 2010-12-07
      • 2011-05-24
      • 2011-03-07
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 2011-06-24
      相关资源
      最近更新 更多