UserControl调用Umbraco的Data Types

时间:2023-03-08 21:37:07

本篇文章介绍的是基于Umbraco CMS技术搭建的网站所使用的相关技术。

1.  需求:

网站前台功能有个表单提交,表单控件用到下拉列表(dropdownlist),需求是在dropdownlist的数据来绑定umbraco的后台数据,而不是直接写在usercontrol的aspx页面中。好处在于如果有更改可以直接在umbraco的后台进行编辑而不更改网站代码。

2.  尝试方法

首先可以确定的是,我们必须在umbraco的Developer页签的Data Types中创建一个Type,类型为dropdownlist,然后录入相关数值,然后前台界面绑定此DataType,以后维护相关的DataType就OK了。

那么,创建完后前台aspx界面怎么进行对DataType绑定?一般情况下aspx页面可以引用filed字段或者是引用marco。

所以我想到的办法是,先创建一个xslt文件然后映射Marco文件,然后页面就可以引用Marco文件了。

Xslt中的代码,如下:

<!DOCTYPE xsl:stylesheet[
  <!ENTITYnbsp " ">
]>
<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxml="urn:schemas-microsoft-com:xslt"
  xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets" xmlns:tagsLib="urn:tagsLib" xmlns:BlogLibrary="urn:BlogLibrary"
  exclude-result-prefixes="msxmlumbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMathExslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets tagsLibBlogLibrary ">

<xsl:output method="xml" omit-xml-declaration="yes"/>

<xsl:param name="currentPage"/>
  <xsl:variable name="categoryList" select="umbraco.library:GetPreValues('1282')//preValue"/>

<xsl:template match="/">

<!--<xsl:copy-ofselect="$currentPage" />-->
    <!--start writing XSLT -->
    <ul>
      <li>
        <a href="/aboutus/medianews.aspx?c1=media&amp;c2=">全部</a>
      </li>
      <li>|</li>
      <xsl:for-each select="$categoryList">
        <li>
          <a href="/aboutus/medianews.aspx?c1=media&amp;c2={@id}">
            <xsl:value-of select="." />
          </a>
        </li>
        <xsl:if test="position()!=last()">
          <li>|</li>
        </xsl:if>
      </xsl:for-each>
    </ul>
  </xsl:template>

</xsl:stylesheet>

Aspx页面代码如下:

<umbraco:Macro Alias="marcoAlias" runat="server"></umbraco:Macro>

可以值得肯定的是这个办法确实可以准确的将DataType的值显示出来,但是随之而来的问题是,表单需要提交,怎么获得xslt中的datatype的值呢?这让人很是头疼。

问题无法解决中,此方法待定。。。。。。

3.  正确方法

在尝试方案中,也不是所有步骤都是否定的,第一个步骤创建DataType这是正确的。那么问题还要回到aspx页面如何调用DataType类型?

在aspx页面仍然使用<aspx:DropDownList>,在aspx.cs页面获取DataType的值然后DropDownList的item进行添加进行绑定。

Cs代码如下:

usingumbraco.cms.businesslogic.datatype;

varvalues = PreValues.GetPreValues(1159);

//1159为dataType的id

foreach (DictionaryEntry de in values)

{

PreValue value =(PreValue)de.Value;

ListItem li = new ListItem();

li.Text = value.Value;

li.Value = value.Id.ToString();

tb_Title.Items.Add(li);

}

表单进行提交时tb_Title.SelectedItem.value。

这样就大功告成了,dropdownlist的值就可以对通过umbraco的DataType进行维护了,而不需要对网站代码进行需改。