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>

我想将 questionPaper.ID 传递回服务器端的 ViewPaper() 事件处理程序,我该怎么做?

    public void ViewPaper(object sender, EventArgs e)
    {

    }
4

3 回答 3

1

我的建议是使用一个Repeater或一个ListView控件

  • Repeater如果数据将用作只读数据,则使用 a

  • 如果ListView您想对结果进行分页和/或允许最终用户对您的数据执行 CRUD 操作,请使用

例如,当使用 aRepeater和 anObjectDataSource控件时,您的代码将如下所示:

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

您可以将其绑定到控件,然后直接引用该控件吗?

我知道你有多个问题论文被输出,所以这本身就是问题所在。自从我使用网络表单已经有一段时间了,但是你能不能不使用中继器控件,它会给你一个行上下文,你可以在其中获得你正在寻找的特定试卷 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 回答