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

时间:2015-09-18 10:07:18

标签: c# asp.net-3.5

我来自MVC背景,我可以从控制器传递模型数据列表,以结构方式查看更多内容。我现在需要如何将来自C#类的storgly类型模型数据传递给页面。

我正在使用ASP.NET 3.5

模型类

  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类中...如何在aspx页面中循环表单数据???

Roles.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>

2 个答案:

答案 0 :(得分:2)

以下是使用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();
    }

 }

答案 1 :(得分:1)

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

在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页面中:     &LT; asp:GridView id =&#34; gvRoles&#34; RUNAT =&#34;服务器&#34; /&GT;

这里发生的是在page_load中获取数据,将其分配给servercontrol(设置数据源)并告诉控件呈现它(Databind)

当页面被处理时,你的代码将被触发,获取你的角色列表,这些角色将被传递给gridview,后者知道它必须为列表中的每个项目生成一个表格,并为每个属性生成一列对于每个项目......

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

希望有所帮助!