1
<asp:Repeater ID="rptLessons" runat="server">
    <ItemTemplate>
        <tr>

            <td><%#Eval("fullname")%></td>
            <td><%#isCompleted(Eval("totallessons"), Eval("completedlessons"), Eval("totalNumAvail"), Eval("totalNumCorrect"))%></td>
            <td><%#FormatPercent(Eval("totalnumcorrect") / Eval("totalNumAvail"))%> <%-- (<%#Eval("totalnumcorrect")%> / <%#Eval("totalNumAvail")%>) --%></td>
            <td><%#FormatPercent(Eval("completedlessons") / Eval("totallessons"))%> <%-- (<%#Eval("completedlessons")%> / <%#Eval("totallessons")%>) --%></td>
            <td><%#Eval("lastaccessed")%></td>
        </tr>
    </ItemTemplate>
   </asp:Repeater>

私はそれを理解することはできませんが、いくつかの NULL データにヒットするとすぐに、次の要素の描画に進むことを拒否します。

4

4 に答える 4

1

確認するには、スタック トレースを提供する必要があります。

しかし、私はいくつかの問題を見ることができます:

  1. FormatPercent 内の DIV#0 エラー
  2. NULL エラー。

ソリューション例

(System.Convert.ToInt32 は DBNull/NULL を 0 に変換する必要があります)

または、 isCompleted を変更して Object パラメータを受け入れ、関数内で NULL / DBNull チェックを行います。

于 2009-02-25T04:19:03.653 に答える
1

少し異なるアプローチでは、マークアップでインライン化するのではなく、コード ビハインドで計算を行うことが役立つ場合があります。null などを簡単にチェックできます。ほとんどの場合、マークアップで単純な Eval() 以外のものを使用して、このパスをたどります。

<td>
    <%#GetCorrectPercent()%>
</td> 

protected string GetCorrectPercent()
{
    if(Eval("totalnumcorrect") == null || Eval("totalNumAvail") == null)
        return "n/a";

    return ((int)Eval("totalnumcorrect") / (int)Eval("totalNumAvail")).ToString();
}

ここですべてのフォーマットが正しいとは限りませんが、これにより別の方向に進むはずです。Eval() は、呼び出し元が現在 DataBind() を実行している限り、呼び出されたメソッド内で機能します。

于 2009-02-25T04:20:16.457 に答える
0

私はより露骨な傾向があります。コードの小さな間違いは許してください。これをテストすることはできません。

マークアップでこれらの評価をリテラルと交換する場合は、コードビハインドで次のようにします。

MyClassのコレクションがある場合。

ページのinitイベントで

this.rptLessons.OnItemDataBound += rptLessons_DataBound...

負荷または選択した場所で

this.rptLessons.DataSource = CollectionOfMyClass;
this.rptLessons.DataBind();

次に、そのitemDataBoundEventで

MyClass myClass = (MyClass)ri.DataItem;
Literal litFullname = FindControl(ri, "litFullName");
litFullName.Text = myClass.Fullname;

このようにして、evalを使用するよりも制御された方法でnullなどに対応できます。

于 2009-02-25T09:37:57.897 に答える
0

推測する必要がある場合、isCompleted関数はNothingの値を処理しないと言えます。関数が例にリストされていないため、これは推測です。

于 2009-02-25T03:24:14.080 に答える