【问题标题】:Eval with declarative data bound ASP.NET带有声明性数据绑定 ASP.NET 的 Eval
【发布时间】:2009-07-14 19:12:47
【问题描述】:

我一直在尝试使用声明性数据绑定 ASP.NET,并与幕后发生的“魔法”作斗争。

如何让它在 ASP.Net 2.0 中工作。这是在数据绑定FormView 控件内。

<asp:Label ID="RecipientsLabel" runat="server" 
    Text='<%# String.Join("; ", Eval("HtmlEncodedRecipients")) %>'>
</asp:Label>

注意:HtmlEncodedRecipientsList&lt;string&gt; 属性。

我收到此错误:

最好的重载方法匹配 'string.Join(string, string[])' 有 一些无效的参数

【问题讨论】:

    标签: asp.net data-binding


    【解决方案1】:

    我发现,如果您将 DataItem 转换为您期望的类型,生活会容易得多。这会启动智能感知,因此您可以看到发生了什么。

    ((MyObject)Container.DataItem).HtmlEncodedRecipients
    

    【讨论】:

      【解决方案2】:

      如果它是一个列表,那么这就是你想要的:

      String.Join("; ", ((List<string>)Eval("HtmlEncodedRecipients")).ToArray())
      

      (要记住的是,如果你把一个 Eval 单独放在一个数据绑定字符串中,它会给出一个“很好”的值来显示。但是如果你在表达式中使用它,它会返回类型对象,所以你必须施放它。

      不过,这有点太粗糙了,无法内联,所以这样做:

      Text=''>

      在你的代码隐藏中

      string[] ConvertRecipients(object recipientObject)
      {
          if(recipientObject is List<string>)
          {
              ...
      

      【讨论】:

      • 他想要一个字符串,而不是一个 string[] 结果,否则这就是我要说的。如果您的参数是 List,它不会为您解决吗?
      • 这更好看,我最终使用的。我确实必须公开该方法。我认为代码隐藏将是本地参考。它也是一个字符串,而不是字符串[]。
      【解决方案3】:

      尝试将Eval("HtmlEncodedRecipients") 转换为List 并在其上调用.ToArray()

      【讨论】:

      • 谢谢乔尔。我曾尝试过其中一种,但不是同时尝试两种。以下对我有用。不完全优雅,但它有效。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 2011-07-16
      相关资源
      最近更新 更多