【问题标题】:Binding data to a hyperlink repeater - how can I control the Text attribute value of each hyperlink?将数据绑定到超链接转发器 - 如何控制每个超链接的 Text 属性值?
【发布时间】:2014-04-03 12:24:11
【问题描述】:

我有一个超链接转发器,我与包含一些 URL 的 List<string> 绑定:

<asp:Repeater id="linksRepeater" runat="server">
   <ItemTemplate>       
        <asp:HyperLink ID="HyperLink1" runat="server" Text='Url to ??' NavigateUrl='<%# Container.DataItem.ToString() %>' />
   </ItemTemplate>
</asp:Repeater>

// Bind data in the code behind
List<string> urls = GetUrls();
linksRepeater.DataSource = urls;
linksRepeater.DataBind();

// Example:
// urls[0] = "http://siteA.com/subsite/sub/sub2/web1.html" 
// urls[1] = "http://siteA.com/subsite/x/y/web2.html"
// urls[2] = "http://siteB.com/x/web3.html"

问题是,使用这段代码,所有的超链接当然是这样显示的:

  • “网址到 ??”
  • “网址到 ??”
  • “网址到 ??”

相反,我想用以下方法调用的结果替换每个超链接实例的Text 属性: string TransformUrl(string url) - 像这样:

<asp:HyperLink ID="HyperLink1" runat="server" Text='Url to <%# TransformUrl(Container.DataItem.ToString()) %>' NavigateUrl='<%# Container.DataItem.ToString() %>' />

但是,此代码会导致错误。 TransformURL() 方法处理 URL 并返回一个新字符串,即我试图得到类似的东西:

  • “指向 siteA.com web1 的网址 [状态:正常]”
  • “指向 siteA.com web2 [状态:正常] 的网址”
  • “指向 siteB.com web3 的网址 [状态:缺失]”

最好的方法是什么,即根据Container.DataItem 的值为每个超链接分配不同的文本属性?

【问题讨论】:

    标签: asp.net .net repeater


    【解决方案1】:

    你快到了。唯一要改变的是你是如何计算值的文字字符串 - 最好在 &lt;%# %&gt; 标签内进行:

    Text='<%# string.Format("Url to {0}", TransformUrl(Container.DataItem.ToString())) %>'
    

    【讨论】:

    • 除此之外,我还必须进行另一项更改才能使其正常工作。我的 &lt;asp:Repeater&gt; 在 UserControl.ascx 中,而方法在 UserControl.ascx.cs 中 - 我必须将方法从 .cs 移动到 .ascx 作为脚本:&lt;script runat="server" type="text/C#"&gt;string TransformUrl(...){...}&lt;/script&gt;
    • @w128,我认为实际上这是您可以解决的更好方法。它是如何宣布的?如果只是string TransformUrl,则默认情况下它是私有的,并且在标记中不可见。您可以在类后面的代码中将其声明为受保护并保持标记干净
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 2014-10-17
    相关资源
    最近更新 更多