0

我正在尝试使用 MS Visual Studio 2010 格式化我在 ASP.NET 的列表框中显示的购物车中的项目。该程序将每个项目的元素显示为连接字符串,它可以工作,但不如我想要的优雅。

我在 cartItem 类中的显示功能是:

Public Function Display() As String 返回 Product.ProductName & "; " & Product.ProductID & ", (" + Quantity.ToString() & " at " & FormatCurrency(Product.UnitPrice) & " each) " 结束函数

有人告诉我“嵌入 HTML 以格式化您的字符串。添加一个表格、trs 和 tds 以及 CSS。” 我在 W3Schools 中查找了“嵌入 HTML”,但没有得到任何相关的信息。我在课堂教科书中找不到这样的东西。当我尝试插入诸如标签之类的语句时,Visual Studio 会将它们转换为 . 我尝试将语句放入响应中,如下所示:

    Response.Write("<html>")
    Response.Write("<table>")
    Response.Write("<tr>")
    Response.Write("<td>")
    Response.Write("<Product.ProductID>")
    Response.Write("</td>")
    Response.Write("<td>")
    Response.Write("<Product.ProductName>")
    Response.Write("</td>")
    Response.Write("</tr>")
    Response.Write("</table>")

但是,我在每一行都收到一条错误消息,说“未声明响应。由于其保护级别,它可能无法访问”。即使它有效,我也不确定 Response.Write 是否适合格式化在列表框中打印的内容。

我可以尝试使用另一个控件(详细信息视图、表单视图)来显示购物车项目,但我只学习了如何将它们绑定到数据库,并且这些项目在我的购物车中(caritemlist 类的一个对象,它是购物车项目数组),而不是在数据库中。

任何帮助将不胜感激。我需要学习这一点,所以我不只是在寻找复制的解决方案;我想了解如何正确地做到这一点。先感谢您。W

4

1 回答 1

1

您可以创建一个用户控件并实现 RenderContents();

public class ProductGrid :  System.Web.UI.WebControls.WebControl
{
    public List<Product> DataSource {get; set;}

    protected override void RenderContents(HtmlTextWriter output)
    {
        //here you can iterate through datasource and write the output
        output.Write("<html><table>");

        foreach(row in this.DataSource)
        {
            output.Write(String.Format("<td>{0}</td><td>{1}</td></tr>",row.ProductID, row.ProductName));
        }

        output.Write("</table></html>");
    }
}

现在将此用户控件放置在 aspx 页面中,例如可以在 div 或 td 中。请记住,如果您在单独的程序集中创建此用户控件,请使用“注册程序集”在 aspxpage 中引用它

<div>
     <ProductGrid Width="100%" ID="ProductGrid1" runat="server" />
</div>

并在 Page_Load 中设置数据源

ProductGrid1.DataSource = ??? ; //from where you get List<Product>
于 2013-05-04T18:59:54.260 回答