我创建了一个图片库,并使用以下过滤器对页面上显示的结果进行排序:
哪个效果很好并按预期过滤,直到我导航到分页中的另一个页面(.aspx?page = 2)并且过滤器恢复为默认选项。我需要它来保存所选选项并相应地显示过滤结果。
这是我正在使用的XSLT的片段,如果需要,我可以发布整个XSLT:
<xsl:variable name="FF_sortType" select="umbraco.library:RequestForm('sortType')" />
<xsl:variable name="FF_resultsPerPage" select="umbraco.library:RequestForm('resultsPerPage')" />
<xsl:variable name="FF_details" select="umbraco.library:RequestForm('details')" />
<xsl:variable name="FF_zoom" select="umbraco.library:RequestForm('zoom')" />
<!-- Filter the page results, Images per page, Most Recent/Alphabetical, Details On/Off, Zoom On/Off -->
<form action="#">
<div class="imageGalleryAlbumFilter">
<fieldset>
<label>Images per page:</label>
<select name="resultsPerPage" id="resultsPerPage" onchange="document.getElementById('BoostMasterForm').submit()" >
<option value="8">
<xsl:if test="$FF_resultsPerPage= '8'">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
8 </option>
<option value="20">
<xsl:if test="$FF_resultsPerPage= '20'">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
20 </option>
<option value="40">
<xsl:if test="$FF_resultsPerPage= '40'">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
40 </option>
<option value="60">
<xsl:if test="$FF_resultsPerPage= '60'">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
60 </option>
<option value="80">
<xsl:if test="$FF_resultsPerPage= '80'">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
80 </option>
<option value="100">
<xsl:if test="$FF_resultsPerPage= '100'">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
100 </option>
</select>
</fieldset>
<fieldset>
<label>Sort by:</label>
<select name="sortType" id="sortType" onchange="document.getElementById('BoostMasterForm').submit()" >
<option value="MostRecent">
<xsl:if test="$FF_sortType= 'MostRecent'">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
Most recent </option>
<option value="Alphabetical">
<xsl:if test="$FF_sortType= 'Alphabetical'">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
Alphabetical </option>
</select>
</fieldset>
<fieldset>
<label>Details:</label>
<select name="details" id="details" onchange="document.getElementById('BoostMasterForm').submit()" >
<option value="On">
<xsl:if test="$FF_details= 'On'">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
On </option>
<option value="Off">
<xsl:if test="$FF_details= 'Off'">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
Off </option>
</select>
</fieldset>
<fieldset>
<label>Zoom:</label>
<select name="zoom" id="zoom" onchange="document.getElementById('BoostMasterForm').submit()" >
<option value="On">
<xsl:if test="$FF_zoom= 'On'">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
On </option>
<option value="Off">
<xsl:if test="$FF_zoom= 'Off'">
<xsl:attribute name="selected">selected</xsl:attribute>
</xsl:if>
Off </option>
</select>
</fieldset>
</div>
</form>
<script type='text/javascript'>
$(document).ready(function() {
$("#resultsPerPage").change(function() {
$("#BoostMasterForm").attr("action", $(this).val());
$("#BoostMasterForm").submit();
});
$("#sortType").change(function() {
$("#BoostMasterForm").attr("action", $(this).val());
$("#BoostMasterForm").submit();
});
$("#details").change(function() {
$("#BoostMasterForm").attr("action", $(this).val());
$("#BoostMasterForm").submit();
});
$("#zoom").change(function() {
$("#BoostMasterForm").attr("action", $(this).val());
$("#BoostMasterForm").submit();
});
});
</script>
如果有人能提供帮助,我们将不胜感激。
干杯,JV
答案 0 :(得分:0)
umbraco.library静态类有一堆帮助器来管理会话和放大器。其他变量。在使用查询字符串进行导航时,表单未提交,并且XSLT中的控件没有viewstate - 能够在页面提交之间保留其值。
有两种解决方法:
umbraco.library:RequestQueryString("myparam")
检索值,要么使用umbraco.library.RequestCookies("myparam")
从cookie中检索值,然后确定需要哪些表单选项在呈现<select>
选项时,将其设为“已选中”。答案 1 :(得分:0)
有几种方法可以做到这一点,但使用usercontrol会很慢并且难以维护。因此,我会建议不要使用usercontrol。
您不需要查看状态,也不需要调用umbraco库。
您可以简单地使用宏属性并使用宏属性语法来捕获查询值。 Umbraco有几种解决这个问题的方法,虽然没有多少人知道。
请注意,此解决方案还可以解决基于请求变量的umbraco宏缓存可能遇到的任何问题。
在XSLT中,您使用参数来捕获宏值
<xslt:param name="numberofitems" select="/macro/numberofitems"/>
添加的宏属性的别名为&#34; numberofitems&#34; /数字类型。
然后在宏中调用模板,添加以下行:
<umbraco:macro alias="mypagedmacro" numberofitems="[@numberofitems],[%numberofitems],10" />
现在使用请求变量调用您的页面?numberofitems = 20
这里发生了什么?
第一个值来自请求变量&#34; numberofitems&#34; (在这种情况下为20)。
如果不可用,umbraco将查看cookie以获取&#34; numberofitems&#34;,以防您将其保存在cookie中供以后使用。
如果没有,则默认值为10.
将所有变量添加到宏中,您可以缓存此分页列表的所有不同情况。
的详细信息