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

次の構文を試して、メソッドのシグネチャを更新して、 のobject代わりにを取り込みます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 に答える
1

エラーはメソッドにあるのではなく、への呼び出しにありDataBinder.Eval()ます。(最初にメソッドへの引数の評価に失敗するため、コール スタックがメソッドに到達することはありEval() ません。) エラーで示されているように、 には引数を 1 つだけ受け入れるオーバーロードがありません

多分あなたはこれを意味しますか?:

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

それとは別に、何らかの型チェックを導入したくなる可能性が十分にあります。 DataBinder.Eval()を返し、objectメソッドは を期待しintます。intメソッドに値を渡す前に値を に変換するか、 メソッドを変更して を受け入れてから内部的objectに に変換することをお勧めします。int

于 2013-11-13T18:49:32.120 に答える
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 に答える