Sitefinity 11无法在前端窗口小部件控件中的回发中获取下拉选择值

时间:2018-06-16 09:26:31

标签: telerik sitefinity sitefinity-5 sitefinity-10 sitefinity-8

我正在使用Sitefinity 11.我已经为新闻模块创建了一个自定义窗口小部件,其中包含所有可用类别的下拉列表,我需要过滤所选类别的新闻。控制回发,但它的SelectedIndex总是零。

我已选中“为此页面启用视图状态”复选框,而页面使用自定义布局模板。

我的.aspx文件中的代码如下:

    <%@ Control Language="C#" %>
    <%@ Import Namespace="Telerik.Sitefinity.Modules.News" %>
    <%@ Import Namespace="Telerik.Sitefinity.Taxonomies.Model" %>
    <%@ Import Namespace="Telerik.Sitefinity.Model" %>

    <%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI.ContentUI" Assembly="Telerik.Sitefinity" %>
    <%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI.Comments" Assembly="Telerik.Sitefinity" %>
    <%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI" Assembly="Telerik.Sitefinity" %>
    <%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
    <%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI.PublicControls.BrowseAndEdit" Assembly="Telerik.Sitefinity" %>


    <script type="C#" runat="server">

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack)
            {
                try
                {
                    var ControlID = Request.Form["__EVENTTARGET"].ToString();
                    Control postbackControl = Page.FindControl(ControlID);
                    lblStatus.Text = "ControlID=" + ControlID + "<br>";
                    DropDownList dd = (DropDownList)postbackControl;
                    lblStatus.Text += "SelectedIndex=" + dd.SelectedIndex.ToString();
                }
                catch (Exception ex) {
                    lblStatus.Text += "<br>" + ex.Message;
                }
            }
            var s = ddlCategories.SelectedIndex;
            if (!IsPostBack)
            {
                /* List of all categories */
                Telerik.Sitefinity.Taxonomies.TaxonomyManager manager1 = Telerik.Sitefinity.Taxonomies.TaxonomyManager.GetManager();
                System.Collections.IList categoryList = manager1.GetTaxa<Telerik.Sitefinity.Taxonomies.Model.HierarchicalTaxon>()
                                        .Where(t => t.Taxonomy.Title == "Categories")
                                        .Select(t =>
                                            new { Id = t.Id, Name = t.Title.ToString() })
                                        .OrderByDescending(t => t.Name)
                                        .ToList();
                ddlCategories.DataSource = categoryList;
                ddlCategories.DataTextField = "Name";
                ddlCategories.DataValueField = "Id";
                ddlCategories.DataBind();
                ddlCategories.Items.Insert(0, new ListItem("", ""));

            }
        }
        protected void DdlCategories_SelectedIndexChanged(object sender, EventArgs e)
        {
            Telerik.Sitefinity.Modules.News.NewsManager newsManager = Telerik.Sitefinity.Modules.News.NewsManager.GetManager();
            if (this.ddlCategories.SelectedIndex > 0)
            {
                //this.FilterExpression += string.Format(" AND Category.Contains(({0}))", this.ddlCategories.SelectedValue.ToString());
                Guid taxonFilter = new Guid(this.ddlCategories.SelectedValue.ToString());

                NewsList.DataSource = newsManager.GetNewsItems().Where(newsItem => newsItem.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Live
                    && newsItem.GetValue<IList<Guid>>("Categories")
                        .Contains(taxonFilter)
                    ).ToList();
            }else {
                NewsList.DataSource = newsManager.GetNewsItems().Where(newsItem => newsItem.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Live).ToList();}
            //populate items list
            //return base.GetItemsList(ref totalCount);
        }
    </script>

    <section class="news-container">
              <div class="container">
                  <asp:Label ID="lblStatus" runat="server"></asp:Label>
                <!-- filter panel -->
                <div class="filter-panel">
                  <div class="panel-box categories">
                    <span class="label">CATEGORIES</span>
                    <div class="select-wrp">
                      <asp:DropDownList ID="ddlCategories" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DdlCategories_SelectedIndexChanged">
                        <asp:ListItem></asp:ListItem>
                      </asp:DropDownList>
                    </div>
                  </div>
                </div>
              </div>


    <sf:SitefinityLabel id="title" runat="server" WrapperTagName="div" HideIfNoText="true" HideIfNoTextMode="Server" /> 
    <telerik:RadListView ID="NewsList" ItemPlaceholderID="ItemsContainer" runat="server" EnableEmbeddedSkins="false" EnableEmbeddedBaseStylesheet="false">
        <LayoutTemplate>
        <div class="container extra-container2">
              <div class="row news-post">   
                <asp:PlaceHolder ID="ItemsContainer" runat="server" />
              </div>
            </div>
        </LayoutTemplate>
        <ItemTemplate>

            <article class="col-12 col-sm-6 col-md-6 col-lg-4 post">
              <div class="holder">
                <h2><sf:FieldListView ID="Title" runat="server" Text="{0}" Properties="Title" TextMode="Encode" EditableFieldType="ShortText"/> </h2>

              </div>
            </article>

        </ItemTemplate>
    </telerik:RadListView>

    <sf:Pager id="pager" runat="server"></sf:Pager>
    <asp:PlaceHolder ID="socialOptionsContainer" runat="server" />

    </section>

编辑:即使以下代码也会得到相同的结果。

 protected void Page_Load(object sender, EventArgs e)
        {

            //if (!IsPostBack)
            {
                /* List of all categories */
                Telerik.Sitefinity.Taxonomies.TaxonomyManager manager1 = Telerik.Sitefinity.Taxonomies.TaxonomyManager.GetManager();
                System.Collections.IList categoryList = manager1.GetTaxa<Telerik.Sitefinity.Taxonomies.Model.HierarchicalTaxon>()
                                        .Where(t => t.Taxonomy.Title == "Categories")
                                        .Select(t =>
                                            new { Id = t.Id, Name = t.Title.ToString() })
                                        .OrderByDescending(t => t.Name)
                                        .ToList();
                ddlCategories.DataSource = categoryList;
                ddlCategories.DataTextField = "Name";
                ddlCategories.DataValueField = "Id";
                ddlCategories.DataBind();
                ddlCategories.Items.Insert(0, new ListItem("", ""));

            }
            if (Page.IsPostBack)
            {
                try
                {
                    var ControlID = Request.Form["__EVENTTARGET"].ToString();
                    Control postbackControl = Page.FindControl(ControlID);
                    lblStatus.Text = "ControlID=" + ControlID + "<br>";
                    DropDownList dd = (DropDownList)postbackControl;
                    lblStatus.Text += "SelectedIndex=" + dd.SelectedIndex.ToString();
                }
                catch (Exception ex) {
                    lblStatus.Text += "<br>" + ex.Message;
                }
            }
            var s = ddlCategories.SelectedIndex;
        }

请指导我缺少什么?

由于

2 个答案:

答案 0 :(得分:0)

确保页面已选中“启用视图状态” - 这位于页面的标题和属性

答案 1 :(得分:0)

我添加了一个“隐藏字段”,回发后我能够获得它的价值。另一种解决方案是在查询字符串中发送值。

感谢所有回复。