在用户控件中将参数传递给XSLT函数

时间:2013-03-04 16:33:55

标签: c# asp.net .net user-controls c1-cms

在Composite C1中,如何将参数传递给在Webforms用户控件中呈现的C1函数?

就我而言,我想在我的用户控件中包含SimpleSearch结果:

<rendering:Function runat="server" id="fnSimpleSearch" >
    <f:function xmlns:f="http://www.composite.net/ns/function/1.0" name="Composite.Search.SimplePageSearch.SearchResults">      
        <f:param name="SearchQuery" value="<%= SearchTerm %>" /> 
        <f:param name="CurrentSite" value="False" /> 
        <f:param name="PageSize" value="10" /> 
        <f:param name="ShowSearchForm" value="True" />      
    </f:function> 
</rendering:Function>

这是CodeBehind:

public string SearchTerm { get; set; }

protected override void OnLoad(EventArgs e)
{
    C1PageRoute.RegisterPathInfoUsage();
    string pathInfo = C1PageRoute.GetPathInfo();
    if(!string.IsNullOrWhiteSpace(pathInfo))
    {
        SearchTerm = pathInfo.Substring(1);
    }

    base.OnLoad(e);
}

如果我这样做,该函数将不会在最终页面中呈现,而只是呈现标记。如果我为SearchQuery参数添加一个静态值,则会渲染它。

如何从CodeBehind传递SearchQuery参数,以便正确呈现函数?

1 个答案:

答案 0 :(得分:1)

你可以做两件事

  1. 使用数据绑定语法,以便SearchQuery参数显示为<f:param name="SearchQuery" value="<%# SearchTerm %>" />

  2. 在CodeBehind中传递参数。这通常是最简单的,使您能够传递各种复杂的对象

    fnSimpleSearch.Parameters.Add(new Param(“SearchQuery”,SearchTerm));