ASP.NET Repeater Control通过QueryString参数链接到详细视图

时间:2010-08-19 19:02:05

标签: c# asp.net

我有一个使用XMLDataSource的Repeater Control来产生一个电影列表(Movies.aspx)。我需要通过查询参数链接到详细页面,如MovieDetails.aspx?movie = Matrix。我在MovieDetails.aspx页面上使用什么控件来渲染单个影片,最好使用ItemTemplate和我自己的HTML。

我的数据来源:

<asp:XmlDataSource ID="MoviesXmlDataSource" runat="server" 
    DataFile="~/Movies.xml" XPath="movies/movie"></asp:XmlDataSource>

我阅读了StackOverflow帖子Send string with QueryString in Repeater Control in ASP.net并通过这样的转发器列出了我的项目:

    <asp:Repeater ID="Repeater1" runat="server" DataSourceID="MoviesXmlDataSource">
    <HeaderTemplate>
        <ul class="productlist">
    </HeaderTemplate>

    <ItemTemplate>
        <li>
            <a href="MovieDetails.aspx?movie=<%#Eval("title")%>"></a>
            <img src="Images/<%#Eval("image") %>" /><br/> 
            <b><%#Eval("title") %></b>
        </li>
    </ItemTemplate>

    <FooterTemplate>
        </ul>
    </FooterTemplate>
</asp:Repeater>

在我的MovieDetail.aspx上,我按预期获得了查询字符串参数。但是,我不知道如何从我的XMLDataSource获取此项并很好地呈现它。我想出了如何使用GridView执行此操作,然后根据您在网格中单击的内容呈现DetailsView,但它太丑了。 Repeater允许我指定自己的HTML,但仅用于列表而不是单个项目。

2 个答案:

答案 0 :(得分:0)

Repeater控件的整体思想是以一致的方式显示一组数据。您应用的HTML实际上是项目列表中的单个项目。如果我是你,我将使用table to display the items。一列中的标题,另一列中的图像,另一列中的详细信息等。或者您可以使用

Title
--------
Image  |   Description Line 1
       |   Description Line 2
       |   Description Line 3
       |   Description Line 4
--------

Title
--------
Image  |   Description Line 1
       |   Description Line 2
       |   Description Line 3
       |   Description Line 4
--------

方法

唯一阻止你获得一个很好的电影列表的是HTML(你已经知道)和创造力的知识!让你的想象力疯狂;)

  • 解释
  • 绝对
  • 情景
  • :(

答案 1 :(得分:0)

我自己就是这么想的。我没有意识到我可以从后面的代码中简单地访问我的XMLDataSource。我没有将它绑定到任何控件。这是我的解决方案:

  1. 在PageLoad上,获取url参数 movie
  2. 将MoviesXMLDataSource转换为XmlDocument
  3. 获取标题与 movie 参数
  4. 匹配的单个节点
  5. 获取标题,说明和图片链接并存储为变量
  6. 在aspx中,渲染普通HTML并插入&lt;%= title%&gt;等等...

    protected void Page_Load(object sender, EventArgs e)
    {
       this.movieTitle = Request["movie"];
    
       string xpath = String.Format("/movies/movie[@title=\"{0}\"]", movieTitle);
       XmlDocument doc = MoviesXmlDataSource.GetXmlDocument();
       XmlNode node = doc.SelectSingleNode(xpath);
    
       this.title = node.Attributes["title"].Value;
       this.description = node.Attributes["description"].Value;
       this.image = node.Attributes["image"].Value;
    }
    
  7. 在aspx中我正常渲染东西:

    <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    
    <asp:XmlDataSource ID="MoviesXmlDataSource" runat="server" 
        DataFile="~/Movies.xml" XPath="movies/movie">
    </asp:XmlDataSource>    
    
    <h1><%=title %></h1>
    <p>
        <img src="<%=image %>"/><br />
        <%=description %>
    </p>
    
    </asp:Content>
    

    最后这很简单。我只是因为强迫自己使用控件而感到困惑。