将强类型数据列表传递并循环到 WebForm

Pass and loop Strongly Types Data List to WebForm

我来自 MVC 背景,我可以从控制器传递模型数据列表,以结构方式查看更多信息。我现在需要知道如何将严格类型的模型数据从 C# class 传递到页面。

我正在使用 ASP.NET 3.5

型号Class

  public class RolesModel
{
    public RolesModel() { }

    public long RoleID { get; set; }

    public string Title { get; set; }

    public string Description { get; set; }

    public DateTime CreatedDate { get; set; }
}

我已经设法将列表数据引入 aspx.cs class...我如何在 aspx 页面中循环表单数据???

角色。aspx.cs class

  protected void Page_Load(object sender, EventArgs e)
    {
        List<RolesModel> roleList = new List<RolesModel>();

        roleList = RoleDefinationRelay.GetAllRoles(null);

    }

aspx

<table>
                       <thead>
                           <tr>
                               <td>Role ID</td>
                               <td>Title</td>
                               <td>Description</td>
                               <td>Created Date</td>
                           </tr>
                       </thead>
                       <tbody>
                           <tr>
                              <%foreach(var item in  %>???????????
                           </tr>
                       </tbody>
                   </table>

以下是使用ASP:Repeater控件。希望这有帮助

在你的 .aspx

<form runat="server"> 
<asp:Repeater id="rptRoles" runat="server">
<HeaderTemplate>
<table border="1" width="100%">
<tr>
   <td>Role ID</td>
   <td>Title</td>
   <td>Description</td>
   <td>Created Date</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
    <td><%#Eval("RoleID")%></td>
    <td><%#Eval("Title")%></td>
    <td><%#Eval("Description")%></td>
    <td><%#Eval("CreatedDate")%></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</form>

.aspx.cs

 protected void Page_Load(object sender, EventArgs e)
 {
    if(!Page.IsPostBack){
        List<RolesModel> roleList = new List<RolesModel>();
        roleList = RoleDefinationRelay.GetAllRoles(null);
        //set data source of repeater and bind
         rptRoles.DataSource = roleList;
         rptRoles.DataBind();
    }

 }

问题是你是从 MVC 的角度考虑的 - 我有同样的问题相反,因为我在 webforms 方面的背景!

在网络表单中,您不会以这种方式绑定数据(您可以 - 但它需要更多的工作,而且它并不是真正被接受的方式)

你的 aspx 中需要的是一个服务器控件,它将为你处理循环和呈现 - 对于这个例子,我将使用 gridview,因为它很快,但是如果你需要更多地控制你的 HTML 你应该使用中继器或列表视图。

你后面的代码就差不多了...

protected void Page_Load(object sender, EventArgs e)
{
    List<RolesModel> roleList = new List<RolesModel>();

    roleList = RoleDefinationRelay.GetAllRoles(null);

    //Bind the gridview
    gvRoles.DataSource = roleList;
    gvRoles.DataBind();
}

然后在您的 aspx 页面中: < asp:GridView id="gvRoles" runat="server" />

这里发生的事情是 page_load 您正在获取数据,将其分配给服务器控件(设置数据源)并告诉控件呈现它(数据绑定)

处理页面时,您的代码将触发,获取您的角色列表,这些角色列表将传递给 gridview,gridview 知道它必须为列表中的每个项目生成一个 table 行以及每个项目的每个 属性 一列...

正如我上面所说,如果您需要对它输出的 HTML 进行更多控制,请查看转发器和 ListView 控件。

希望对您有所帮助!