3

すべて、一般に、 page のコード ビハインド クラス ファイルで定義されたページ内の変数を出力したい場合。publicまたはprotect可視性で変数を設定できます。フロントページでは、以下のように使用できます。 <%=VariableName%>.

しかし、ListView で使用できない理由がわかりません。私のコードを見直すのを手伝ってください。

フロントページ

<div id="divIssuedListContainer" class="myIssuedList">
<asp:ListView id="listShower" runat="server">
    <LayoutTemplate>
        <div id="divIssuedListHeadTitle">
            <div id="divIssuedListTitleIco">
                <img alt="" src="ico/IssuedCap.png" />
            </div>
            <div id="divIssuedListTitleName">
                <span>ISSUED</span><span>TRADE NAMES</span><span>/LICENSES</span>
            </div>
            <div id="divIssuedListItemNumber">
                <span>
                    <%=iListNumber%></span>
            </div>
        </div>
        <div style="clear:both"></div>
        <div id="divIssuedListBody">
            <ul>
                <asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder>
            </ul>
        </div>
    </LayoutTemplate>
    <ItemTemplate>
        <li>
            <table>
                <tr>
                    <td>
                        <img alt="" src="" />
                    </td>
                    <td>
                        <div>
                            <span>
                                <%# Eval("altID") %>
                                -
                                <%# Eval("englishTradeName") %></span></div>
                        <div>
                            <span>Expired Date:<%# Eval("expDate") %></span>
                        </div>
                    </td>
                </tr>
            </table>
        </li>
    </ItemTemplate>
</asp:ListView>

ページのコード ビハインド

public partial class _Default : System.Web.UI.Page
    {
        protected int iListNumber = 0;
        protected void Page_Load(object sender, EventArgs e)
        {
            List<SimpleCapModel> DataSourceList = TestDataHelper.GetMyIssuedList();
            listShower.DataSource = DataSourceList;
            iListNumber = DataSourceList.Count();
            listShower.DataBind();
        }
    }

エラーページに次のように表示されました:

 The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).

Source Error:


Line 19:             listShower.DataSource = DataSourceList;
Line 20:             iListNumber = DataSourceList.Count();
Line 21:             listShower.DataBind();//this line cause error.
Line 22:         }
Line 23:     }

そして、私が式を使用する場合<%#iListNumber%>。エラーはなくなりましたが、リストの番号ではなく空の値を取得しました。以下のレンダリング結果 html を確認してください。

<div id="divIssuedListItemNumber">
<span> </span>
</div>

私は何かを逃したかどうかわからなかったのですか?もしそうなら、私に知らせてください。ありがとう。

4

2 に答える 2

2

<%#iListNumber %>ListView のデータ バインディングを使用しているため、使用する必要があります。そうしないと、例外が発生します (インライン式の詳細については、 http ://support.microsoft.com/kb/976112 を参照してください)。

使用してみて<%#iListNumber.ToString %>、違いがあるかどうかを確認してください。

更新

問題は、 inline-expression が にあるようにLayoutTemplate見えます.イベントを処理するかOnLayoutCreatedListView.

を拡張する方法の例については、次のいずれかを参照してくださいListView

于 2013-06-04T03:25:22.487 に答える
0

あなたが受け取っているエラーを考えると、それは基本的にこれを意味します:データバインドされたコントロールで .NET タグをランダムにスローすることはできません。

解決策は、代わりに、次のように .NET コントロールでそのランダム テキストをスローすることです。<asp:Literal Runat="server" Text="<%# iListNumber %>" />

コードに .NET コードブロックを配置すると、そのコントロール プレースホルダーを動的に構築する必要があります。少しトリッキーです。しかし、すべてのカスタム タグをコントロールにラップすると、その 1 つのプロパティだけがデータバインドされ、データバインドされたブロックは「クリーン」なままになります。

于 2013-06-04T03:40:18.907 に答える