1

asp.net アプリケーションでは、aspx ページに次のコードがあります。

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
   <% foreach (var questionPaper in QuestionPapers) { %>
    <div style="border-bottom: 1px solid; padding-bottom:20px">
        <%= questionPaper.University %><br/>
        <%= questionPaper.CourseName %>: <%= questionPaper.CourseCode %><br/>
        <%= questionPaper.Type %><br/>
        <%= questionPaper.Year %><br/>
        <asp:Button ID="View_Paper" runat="server" OnClick="ViewPaper" Text="View Paper"/>
    </div>
   <% } %>
</asp:Content>

サーバー側の ViewPaper() イベント ハンドラに questionPaper.ID を渡したいのですが、どうすればよいですか?

    public void ViewPaper(object sender, EventArgs e)
    {

    }
4

3 に答える 3

1

RepeaterまたはListViewコントロールを使用することをお勧めします

  • データを読み取り専用として使用するRepeater場合はa を使用します

  • ListView結果をページングする場合、および/またはエンド ユーザーがデータに対して CRUD 操作を実行できるようにする場合は、を使用します。

たとえば、 aRepeaterおよびaObjectDataSourceコントロールを使用する場合、コードは次のようになります。

ASPX

<asp:ObjectDataSource ID="ods" runat="server" 
    SelectMethod="GetQuestionPapers" 
    TypeName="Your_Namespace.PapersRepository">
</asp:ObjectDataSource>
<asp:Repeater runat="server" DataSourceID="ods" ID="r" OnItemCommand="r_ItemCommand">
    <ItemTemplate>
        <div style="border-bottom: 1px solid; padding-bottom:20px">
            <asp:HiddenField runat="server" ID="paperID" Value='<%# Eval("PaperID") %>'/>

            <asp:Label runat="server" ID="university" Text='<%# Eval("University") %>'/><br />
            <asp:Label runat="server" ID="courseName" Text='<%# Eval("CourseName") %>'/>:<asp:Label runat="server" ID="courseCode " Text='<%# Eval("CourseCode ") %>'/><br />
            <asp:Label runat="server" ID="paperType" Text='<%# Eval("Type") %>' /><br />
            <asp:Label runat="server" ID="year" Text='<%# Eval("Year") %>' /><br />
            <asp:Button ID="View_Paper" runat="server" Text="View Paper" CommandName="ViewPaperCommand"
            />
        </div>
    </ItemTemplate>
    <SeparatorTemplate>
        <hr />
    </SeparatorTemplate>
</asp:Repeater>

ASPX コードビハインド

protected void r_ItemCommand(object sender, RepeaterCommandEventArgs e)
{
    switch (e.CommandName)
    {
        case "ViewPaperCommand":
            var hidden = e.Item.FindControl("paperID") as HiddenField;
            var myPaperID = hidden.Value;

            break;
    }
}

論文リポジトリ クラス

namespace Your_Namespace 
{
    public class PapersRepository 
    {
        public IEnumerable < QuestionPaper > GetQuestionPapers() 
        {
            return QuestionPapers.AsEnumerable();
        }
    }
}
于 2012-08-12T17:00:44.367 に答える
0

それをコントロールにバインドして、そのコントロールを直接参照できますか?

複数の質問紙が出力されていることは知っているので、それ自体が問題です。Web フォームを使用してからしばらく経ちましたが、探している特定の問題用紙 ID を取得できる行コンテキストを提供するリピーター コントロールを使用できませんか?

于 2012-08-12T16:35:29.960 に答える
0

リピーターをご利用ください。この種の古い学校の ASP の古典的なコードは、ASP.Net プロジェクトには適していません。例を次に示します: http://www.dotnetcurry.com/ShowArticle.aspx?ID=663

リピーターをカスタマイズして、軽量の DataGrid または ListView と同等のものを作成することもできます。

于 2012-08-12T19:00:09.663 に答える