【问题标题】:How to create Dropdownlist using XSLT C#?如何使用 XSLT C# 创建下拉列表?
【发布时间】:2014-03-22 07:03:01
【问题描述】:

我正在研究使用 xslt 文件来显示重复项目的项目。如下:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes" />
  <xsl:param name="BasePath" select="/" />
  <xsl:param name="OffersPerPage" select="4" />
  <xsl:template match="/" xml:space="default">
   <div class="offers_section">
<script>
 $(document).ready(function() {
   $(".offers_page").hide();
   $("#OfferPage1").show();
  });
 function OffersPageChange(CurrentPage, NewPage)
  {
   $("#OfferPage" + CurrentPage).hide();
$("#OfferPage" + NewPage).show();
 $("$offers_section").focus();
 return false;
 }
</script>

<xsl:choose>
  <xsl:when test="count(//Offers/Offer) &gt; 0">

  <xsl:for-each select="//Offers/Offer[(position()) mod $OffersPerPage = 1 or position = 1]">
    <xsl:variable name="page" select="position()" />
    <xsl:variable name="lastpage" select="last()" />

    <div class="offers_page"><xsl:attribute name="id">OfferPage<xsl:value-of select="$page" /></xsl:attribute>
      <div class="offers_paging">
        <xsl:if test="$page &gt; 1">
        <a href="#"><xsl:attribute name="onclick">return OffersPageChange(<xsl:value-of select="$page" />, <xsl:value-of select="$page - 1" />)</xsl:attribute>&lt; Previous</a>
        </xsl:if>

        <xsl:if test="$page &lt; $lastpage">
        <a href="#"><xsl:attribute name="onclick">return OffersPageChange(<xsl:value-of select="$page" />, <xsl:value-of select="$page + 1" />)</xsl:attribute>Next &gt;</a>
        </xsl:if>
        <br /><br />

        <xsl:if test="$lastpage != 1">
          <xsl:for-each select="//Offers/Offer">
            <xsl:if test="(position() - 1) mod $OffersPerPage = 0">
              <a href="#"><xsl:attribute name="class"><xsl:choose><xsl:when test="(position() - 1) div $OffersPerPage + 1 = $page">offers_page_number_active</xsl:when><xsl:otherwise>offers_page_number</xsl:otherwise></xsl:choose></xsl:attribute><xsl:attribute name="onclick">return OffersPageChange(<xsl:value-of select="$page" />, <xsl:value-of select="(position() - 1) div $OffersPerPage + 1" />)</xsl:attribute><xsl:value-of select="(position() - 1) div $OffersPerPage + 1" /></a>
            </xsl:if>
          </xsl:for-each>
          <br /><br />
        </xsl:if>
      </div>

      <xsl:for-each select=". | following-sibling::Offer[(position()) &lt; $OffersPerPage]" >
        <div class="offers_offer">
          <h2><xsl:value-of select="Partner" /></h2>

          <xsl:if test="ImageSource != ''">
          <div class="offers_image_container">
            <div class="offers_image">
              <img width="100%"><xsl:attribute name="src"><xsl:value-of select="$BasePath" />portals/<xsl:value-of select="ImageSource" /></xsl:attribute></img>
            </div>
            <div class="offers_image_overlay">
              <img width="100%" height="33" alt=""><xsl:attribute name="src"><xsl:value-of select="$BasePath" />portals/_default/skins/images/offer%20top%20swoop.png</xsl:attribute></img>
              <img width="100%" height="126" style="position:absolute;bottom:0;left:0;right:0;" alt=""><xsl:attribute name="src"><xsl:value-of select="$BasePath" />portals/_default/skins/images/offer%20bottom%20swoop.png</xsl:attribute></img>
            </div>
          </div>
          </xsl:if>

          <xsl:if test="Description != ''">
          <div class="offers_description">
            <xsl:value-of select="Description" /><br />
          </div>
          </xsl:if>

          <xsl:if test="LegalInformation != '' and LegalOnOfferPage = 'True'">
          <div class="offers_legal">
            <xsl:value-of select="LegalInformation" /><br />
          </div>
          </xsl:if>

          <xsl:if test="Facebook != '' or Twitter != ''">
          <div class="offers_social_media">
            Follow us on:<br />
            <div class="social_media_links">
              <xsl:if test="Facebook != ''">
              <a class="facebook_logo" style="float:none;" target="_blank" title="Facebook"><xsl:attribute name="href"><xsl:value-of select="Facebook" /></xsl:attribute></a>
              </xsl:if>
              <xsl:if test="Twitter != ''">
              <a class="twitter_logo" style="float:none;" target="_blank" title="Twitter"><xsl:attribute name="href">https://www.twitter.com/<xsl:value-of select="Twitter" /></xsl:attribute></a>
              </xsl:if>
            </div>
          </div>
          </xsl:if>

          <xsl:if test="UrlText != ''">
          <div class="offers_url">
          <a target="_blank"><xsl:attribute name="href"><xsl:value-of select="Url" /></xsl:attribute><xsl:value-of select="UrlText" /></a>
          </div>
          </xsl:if>

          <xsl:if test="Email != ''">
          <div class="offers_email">
          Email: <a><xsl:attribute name="href">mailto:<xsl:value-of select="Email" /></xsl:attribute><xsl:value-of select="Email" /></a>
          </div>
          </xsl:if>

          <xsl:if test="Phone != ''">
          <div class="offers_phone">
          Tel no: <strong><xsl:value-of select="Phone" /></strong>
          </div>
          </xsl:if>
        </div>
      </xsl:for-each>
      <xsl:if test="$lastpage &gt; 1">

      <div class="offers_paging">
        <xsl:if test="$lastpage != 1">
          <xsl:for-each select="//Offers/Offer">
            <xsl:if test="(position() - 1) mod $OffersPerPage = 0">
              <a href="#"><xsl:attribute name="class"><xsl:choose><xsl:when test="(position() - 1) div $OffersPerPage + 1 = $page">offers_page_number_active</xsl:when><xsl:otherwise>offers_page_number</xsl:otherwise></xsl:choose></xsl:attribute><xsl:attribute name="onclick">return OffersPageChange(<xsl:value-of select="$page" />, <xsl:value-of select="(position() - 1) div $OffersPerPage + 1" />)</xsl:attribute><xsl:value-of select="(position() - 1) div $OffersPerPage + 1" /></a>
            </xsl:if>
          </xsl:for-each>
          <br /><br />
        </xsl:if>

        <xsl:if test="$page &gt; 1">
        <a href="#"><xsl:attribute name="onclick">return OffersPageChange(<xsl:value-of select="$page" />, <xsl:value-of select="$page - 1" />)</xsl:attribute>&lt; Previous</a>
        </xsl:if>

        <xsl:if test="$page &lt; $lastpage">
        <a href="#"><xsl:attribute name="onclick">return OffersPageChange(<xsl:value-of select="$page" />, <xsl:value-of select="$page + 1" />)</xsl:attribute>Next &gt;</a>
        </xsl:if>
      </div>
      </xsl:if>
    </div>
  </xsl:for-each>
  </xsl:when>
  <xsl:otherwise>
    <div class="offers_not_available">
      Sorry, no offers are currently available in this category
    </div>
  </xsl:otherwise>
</xsl:choose>
</div>

代码背后的代码是:

 void Load_Category(int CategoryId)
    {
        string skinPath = PortalSettings.ActiveTab.SkinPath;

        XDocument XDocOffers = new XDocument(new XElement("Offers"));
        SqlDataProvider provider = new SqlDataProvider();
        SqlConnection SQLConnection = new SqlConnection(provider.ConnectionString);
        SQLConnection.Open();

        SqlConnection SQLConnectionAnswers = new SqlConnection(provider.ConnectionString);
        SQLConnectionAnswers.Open();

        SqlCommand sqlComm = new SqlCommand("CIDOTOffersGetOffersByCategory", SQLConnection);
        sqlComm.CommandType = CommandType.StoredProcedure;

        sqlComm.Parameters.Add(new SqlParameter("@CategoryId", SqlDbType.Int)).Value = CategoryId;

        SqlDataReader OffersReader = sqlComm.ExecuteReader();

        string OfferId;
        string Partner;
        string Description;
        string ImageSource;
        string Url;
        string UrlText;
        string Email;
        string Phone;
        string LegalInformation;
        string Facebook;
        string Twitter;
        string LegalOnOfferPage;
        string onclick;
        string Emailonclick;
        while (OffersReader.Read())
        {
            OfferId = OffersReader["OfferId"].ToString();
            Partner = OffersReader["Partner"].ToString();
            Description = OffersReader["Description"].ToString();
            ImageSource = OffersReader["ImageSource"].ToString();
            Url = OffersReader["Url"].ToString();
            UrlText = OffersReader["UrlText"].ToString();
            Email = OffersReader["Email"].ToString();
            Phone = OffersReader["Phone"].ToString();
            LegalInformation = OffersReader["LegalInformation"].ToString();
            Facebook = OffersReader["Facebook"].ToString();
            Twitter = OffersReader["Twitter"].ToString();
            LegalOnOfferPage = OffersReader["LegalOnOfferPage"].ToString();
            onclick = "_gaq.push(['_trackEvent', 'Book Now', 'click', '" + Partner + "']);";
            Emailonclick = "_gaq.push(['_trackEvent', 'Email', 'click', '" + Email + "']);";
            XElement NextOffer =
              new XElement("Offer",
                new XElement("OfferId", OfferId),
                new XElement("Partner", Partner),
                new XElement("Description", Description),
                new XElement("ImageSource", ImageSource),
                new XElement("Url", Url),
                new XElement("UrlText", UrlText),
                new XElement("Email", Email),
                new XElement("Phone", Phone),
                new XElement("LegalInformation", LegalInformation),
                new XElement("Facebook", Facebook),
                new XElement("Twitter", Twitter),
                new XElement("LegalOnOfferPage", LegalOnOfferPage),
                new XElement("onclick", onclick),
                new XElement("Emailonclick", Emailonclick)
              );

            XDocOffers.Element("Offers").Add(NextOffer);
        }

        OffersReader.Close();
        SQLConnection.Close();

        string XSLTFile = Server.MapPath(skinPath + "xslt/offers.xslt");
        if (File.Exists(XSLTFile))
        {
            StringWriter XSLTOutput = new StringWriter();
            XmlWriter XMLOutput = XmlWriter.Create(XSLTOutput);

            // Load the style sheet.
            XslCompiledTransform xslt = new XslCompiledTransform();
            xslt.Load(XSLTFile);

            XsltArgumentList ArgumentsQA = new XsltArgumentList();

            if (Settings.ContainsKey("OffersPerPage"))
            {
                ArgumentsQA.AddParam("OffersPerPage", "", Settings["OffersPerPage"].ToString());
            }
            else
            {
                ArgumentsQA.AddParam("OffersPerPage", "", "4");
            }

            ArgumentsQA.AddParam("BasePath", "", "/");

            // Execute the transform and output the results to a writer.
            xslt.Transform(XDocOffers.CreateReader(), ArgumentsQA, XMLOutput);

            //Output.Controls.Add(new LiteralControl(XSLTOutput.ToString().Replace("&amp;", "&")));
            Output.Controls.Add(new LiteralControl(HttpUtility.HtmlDecode(XSLTOutput.ToString())));

        }
        else
        {
            Output.Controls.Add(new LiteralControl("Cannot find XSLT file"));
        }
    }

我以前从未使用过 xslt,现在我想在页面中添加一个下拉列表,并且需要从页面正文中的重复项中创建对选定值的搜索。

我的问题是:

  1. 如何在 xslt 中创建下拉列表。 我已经尝试了以下链接,但它对我不起作用。 Generate dynamic dropdown in xslt using c#

  2. 如何创建一个从重复项中搜索的事件。有什么方法可以调用下拉列表的 selectedindex 更改事件吗?

请帮忙。

【问题讨论】:

    标签: c# asp.net xslt drop-down-menu


    【解决方案1】:

    一个DropDownList你可以创建像

    <asp:DropDownList xmlns:asp="System.Web.UI.WebControls" ID="TheDdl" OnSelectedIndexChanged="Selection_Change" runat="server">
       <asp:ListItem Value="1" Text="Text 1" />
       <asp:ListItem Value="2" Text="Text 2" />
       <asp:ListItem Value="3" Text="Text 3" />
    </asp:DropDownList>
    

    Code behind 看起来像

    void Selection_Change(Object sender, EventArgs e)
    {
        // do something ...
    }
    

    【讨论】:

      【解决方案2】:

      Xslt 只是将一些源 XML 转换为一些格式化的文本,通常是 HTML 或 XML。你的这个 xslt 正在创建 html 代码,一些

      。我看到 xslt 代码中绑定了一些链接。

      生成的这个 html 代码存储在字符串 XSLTOutput.ToString() 中,该字符串稍后会作为文字控件插入到 ASP 页面中。后面的代码是通过从数据库中检索一些数据来创建源 XML 文档 XDocOffers。

      您可以编辑已提供的 xslt 代码,并允许它插入 html 控件

      如果你想使用一些 控件,我猜你正在尝试使用 XDocOffers 作为数据源。如果不是,您必须编写自己的代码才能从数据库中查询。

      您可以运行代码并观察 XDocOffers XML 文档及其结构。然后您可以具体询问您要使用哪个成员作为下拉键,以及哪个作为下拉值。并专门讨论下拉控件的问题。

      【讨论】:

        猜你喜欢
        • 2017-08-05
        • 1970-01-01
        • 2012-11-02
        • 2017-11-08
        • 2015-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-04
        相关资源
        最近更新 更多