【问题标题】:Trying to use a String.Format in a Repeater but a getting syntax error尝试在中继器中使用 String.Format 但出现语法错误
【发布时间】:2013-01-30 21:11:11
【问题描述】:

我不明白我对这段代码做错了什么。我认为这可能与 ("')s 有关

<asp:TextBox ID="txtPassportNumber" runat="server" MaxLength="19"
    Text="<%#  String.Format('{0}{1}','######',((TSAPassenger) Container.DataItem).Passport.DocumentNumber.Text.Remove(0,6)) %>"
    Enabled="<%# IsOutsideTenDayCutoff %>"></asp:TextBox>

我收到太多字符错误

切换到:

 <asp:TextBox ID="txtPassportNumber" runat="server"
     Text="<%#  String.Format("{0}{1}","######",((TSAPassenger) Container.DataItem).Passport.DocumentNumber.Text.Remove(0,6)) %>"
     Enabled="<%# IsOutsideTenDayCutoff %>"></asp:TextBox>

并得到这个错误:

解析器错误消息:服务器标签格式不正确。

多亏了良好的帮助,最终代码得以运行:

Text='<%# (((TSAPassenger) Container.DataItem).Passport.DocumentNumber != null &&  ((TSAPassenger) Container.DataItem).Passport.DocumentNumber != "") ? "******" + ((TSAPassenger) Container.DataItem).Passport.DocumentNumber.ToString().Remove(0,6) : "" %>'

【问题讨论】:

  • 如果这是你经常使用的东西,你可能想要创建一个TSAPassenger 的新属性,你可以调用它来获取一个“屏蔽”的护照号码,而不是在你使用它的任何地方格式化它。
  • 你还没有引起足够的重视,你还在用"来包围Text属性值。 Abe Miessler 和 Kelsey 建议,像我一样切换到 ' 进行封闭(就在 ... Text= 之后和 Enabled=... 之前)。保留" inside 属性的脚本语法。

标签: c# asp.net data-binding repeater string.format


【解决方案1】:

您需要确保对Text 属性使用单引号,例如Text='yourstuff'

然后在绑定语句中使用双引号。绑定中的代码必须是 vanilla c#,如果它不会在 .cs 文件中编译,它也不会内联编译,并且单引号表示 c# 中的字符,而不是字符串。

这行得通:

<asp:TextBox ID="txtPassportNumber" runat="server"
    Text='<%# string.Format("{0}{1}", "######", ((TSAPassenger) Container.DataItem).Passport.DocumentNumber.Text.Remove(0,6)) %>'
    Enabled="<%# IsOutsideTenDayCutoff %>"></asp:TextBox>

注意单引号和双引号。您应该可以按原样复制和粘贴它。

【讨论】:

  • 这是我得到的错误:编译器错误消息:CS1061:'string'不包含'Text'的定义,并且没有扩展方法'Text'接受'类型的第一个参数可以找到 string'(您是否缺少 using 指令或程序集引用?)
  • @user1566783 因此,您的问题已通过听起来像的格式得到解决,并且您没有使用您尝试正确绑定的对象。 ((TSAPassenger) Container.DataItem).Passport.DocumentNumber 没有名为 Text 的属性。您应该能够逐步解决此问题,因为它与string.Format 问题无关。这就是为什么我更喜欢使用每个控件的OnDataBinding 事件而不是进行内联数据绑定的原因。代码更简洁,更易于调试。
  • 好的,我现在明白我的对象在哪里,我不确定这是字符串还是整数,所以我会弄清楚并得到这个集合。感谢您的帮助。
  • 这是我的最终结果 Text=''
  • @user1566783 当代码开始变得如此复杂时,将其移出标记将使下一个人更容易处理:)
【解决方案2】:

你应该使用双引号而不是单引号

<asp:TextBox ID="txtPassportNumber" runat="server" MaxLength="19" Text="<%#  String.Format("{0}{1}","######",((TSAPassenger) Container.DataItem).Passport.DocumentNumber.Text.Remove(0,6)) %>" Enabled="<%# IsOutsideTenDayCutoff %>"></asp:TextBox>

【讨论】:

  • 得到错误服务器标签格式不正确。我什至删除了最大长度,因为我得到了太多字符错误
  • 这根本没有帮助。它实际上不起作用,甚至更令人困惑,因为它仍在产生语法错误。
【解决方案3】:

您不能使用' 定义字符串。您现在正在做的是尝试创建一个不可行的多字符字符。

尝试将其更改为:

Text='<%#  String.Format("{0}{1}","######",((TSAPassenger) Container.DataItem).Passport.DocumentNumber.Text.Remove(0,6)) %>'

【讨论】:

  • 两件事 - 尝试让 TextBox 标签自动关闭(删除 &lt;/asp:TextBox&gt; 标签)。还要确保在 Text= 之后的所有内容都使用单引号
【解决方案4】:

您应该在Text 属性中颠倒'" 的用法。而不是:

Text="<%#  String.Format('{0}{1}','######',((TSAPassenger) Container.DataItem).Passport.DocumentNumber.Text.Remove(0,6)) %>"

使用:

Text='<%#  String.Format("{0}{1}","######",((TSAPassenger) Container.DataItem).Passport.DocumentNumber.Text.Remove(0,6)) %>'

您必须在&lt;%# ... %&gt; 标记之间提供有效的C# 语法。 '"{0}{1}"''######'C# 语法中都无效,因为'' 只能包含chars('a''0' 等)。

【讨论】:

  • 然后我得到了这个错误,虽然“s 服务器标签格式不正确。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-05
  • 2014-07-26
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多