1

我想要做的是从 ItemTemplate 中调用一个方法。我有以下内容:

<ItemTemplate>
    <asp:Label ID="lblFixtureType" runat="server" Text='<%# FixtureType(DataBinder.Eval("FixtureType")) %>'></asp:Label>
</ItemTemplate>

我喜欢做的是传递 FixtureType 的值,然后在其后附加“A”。我收到以下消息:方法 'Eval' 没有重载需要 1 个参数

protected string FixtureType(int FixtureType)
{
  return Convert.ToString(FixtureType) + "A";
}
4

3 回答 3

1

错误不在于您的方法,错误在于对DataBinder.Eval(). (调用堆栈永远不会到达您的方法,因为它无法首先评估您的方法的参数。)如错误所示,Eval() 没有只接受一个参数的重载

也许你的意思是这个?:

FixtureType(DataBinder.Eval(Container.DataItem, "FixtureType"))

除此之外,您很有可能想要进行一些类型检查。 DataBinder.Eval()返回一个object并且您的方法需要一个int. 您可能希望在将值int传递给您的方法之前将其转换为 an,或者将您的方法更改为接受 anobject然后在int内部将其转换为 an。

于 2013-11-13T18:49:32.120 回答
1

尝试以下语法并更新方法的签名以采用 anobject而不是int.

<ItemTemplate>
    <asp:Label ID="lblFixtureType" runat="server" Text='<%#FixtureType(DataBinder.Eval(Container.DataItem, "FixtureType")) %>'></asp:Label>
</ItemTemplate>

protected bool FixtureType(object FixtureType)
{
  return Convert.ToString(FixtureType) + "A";
}
于 2013-11-13T18:50:27.720 回答
0

有几种方法可以做到这一点:

<ItemTemplate>
    <asp:Label ID="lblFixtureType" runat="server" Text='<%# FixtureType(Convert.ToInt32(Eval("FixtureType"))) %>'></asp:Label>
</ItemTemplate>

或者

<ItemTemplate>
    <asp:Label ID="lblFixtureType" runat="server" Text='<%# Eval("FixtureType").ToString() + "A" %>'></asp:Label>
</ItemTemplate>

或者

<ItemTemplate>
    <asp:Label ID="lblFixtureType" runat="server" Text='<%# Eval("FixtureType", "{0}A") %>'></asp:Label>
</ItemTemplate>
于 2013-11-13T18:57:00.937 回答