【问题标题】:ASP.NET Repeater Control linking to detailed view via QueryString parametersASP.NET 中继器控件通过 QueryString 参数链接到详细视图
【发布时间】:2010-08-19 19:02:05
【问题描述】:

我有一个使用 XMLDataSource 生成电影列表 (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,但仅限于列表而不是单个项目。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    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 知识(您已经知道)和创造力!尽情发挥你的想象力吧;)

    • 列表
    • 绝对是
    • 这个
    • 场景
    • :(

    【讨论】:

    • 我了解中继器的用途,而且我已经有了一份不错的电影清单。我的问题是如何在不同的页面上渲染单个电影。如何从现有数据源中获取单个项目,然后使用纯 HTML 呈现它?
    【解决方案2】:

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

    1. 在PageLoad时,获取url参数movie
    2. 将 MoviesXMLDataSource 转换为 XmlDocument
    3. 获取标题与我的 movie 参数匹配的单个节点
    4. 获取标题、描述和图片链接并存储为变量
    5. 在aspx中,渲染正常的HTML并插入等等……

      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;
      }
      

    在 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>
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-04
      • 2015-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多