问题描述
限时送ChatGPT账号..我正在使用 Sitefinity 11.我为新闻模块创建了一个自定义小部件,具有所有可用类别的下拉菜单,我需要在其中过滤所选类别的新闻.控制回发但它的 SelectedIndex 始终为零.
我已选中启用此页面的视图状态"复选框,页面正在使用自定义布局模板.
我的 .aspx 文件中的代码如下:
<%@ Control Language="C#" %><%@ 导入命名空间="Telerik.Sitefinity.Modules.News" %><%@ 导入命名空间="Telerik.Sitefinity.Taxonomies.Model" %><%@ 导入命名空间="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){如果 (Page.IsPostBack){尝试{var ControlID = Request.Form["__EVENTTARGET"].ToString();控件 postbackControl = Page.FindControl(ControlID);lblStatus.Text = "ControlID=" + ControlID + "
";DropDownList dd = (DropDownList)postbackControl;lblStatus.Text += "SelectedIndex=" + dd.SelectedIndex.ToString();}捕获(异常前){lblStatus.Text += "
"+ ex.Message;}}var s = ddlCategories.SelectedIndex;如果 (!IsPostBack){/* 所有类别的列表 */Telerik.Sitefinity.Taxonomies.TaxonomyManager manager1 = Telerik.Sitefinity.Taxonomies.TaxonomyManager.GetManager();System.Collections.IList categoryList = manager1.GetTaxa().Where(t => t.Taxonomy.Title == "Categories").Select(t =>新 { Id = t.Id, Name = t.Title.ToString() }).OrderByDescending(t => t.Name).ToList();ddlCategories.DataSource = categoryList;ddlCategories.DataTextField = "名称";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();如果(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>("类别").包含(分类过滤器)).ToList();}别的 {NewsList.DataSource = newsManager.GetNewsItems().Where(newsItem => newsItem.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Live).ToList();}//填充物品列表//返回 base.GetItemsList(ref totalCount);}</script><section class="news-container"><div class="容器"><asp:Label ID="lblStatus" runat="server"></asp:Label><!-- 过滤器面板--><div class="filter-panel"><div class="面板框类别"><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><sf:SitefinityLabel id="title" runat="server" WrapperTagName="div" HideIfNoText="true" HideIfNoTextMode="Server"/><telerik:RadListView ID="NewsList" ItemPlaceholderID="ItemsContainer" runat="server" EnableEmbeddedSkins="false" EnableEmbeddedBaseStylesheet="false"><布局模板><div class="container extra-container2"><div class="row news-post"><asp:PlaceHolder ID="ItemsContainer" runat="server"/>
</LayoutTemplate><项目模板><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"/>
</文章></ItemTemplate></telerik:RadListView><sf:Pager id="pager" runat="server"></sf:Pager><asp:PlaceHolder ID="socialOptionsContainer" runat="server"/></节>
即使下面的代码也得到相同的结果.
protected void Page_Load(object sender, EventArgs e){//如果(!IsPostBack){/* 所有类别的列表 */Telerik.Sitefinity.Taxonomies.TaxonomyManager manager1 = Telerik.Sitefinity.Taxonomies.TaxonomyManager.GetManager();System.Collections.IList categoryList = manager1.GetTaxa().Where(t => t.Taxonomy.Title == "Categories").Select(t =>新 { Id = t.Id, Name = t.Title.ToString() }).OrderByDescending(t => t.Name).ToList();ddlCategories.DataSource = categoryList;ddlCategories.DataTextField = "名称";ddlCategories.DataValueField = "Id";ddlCategories.DataBind();ddlCategories.Items.Insert(0, new ListItem("", ""));}如果 (Page.IsPostBack){尝试{var ControlID = Request.Form["__EVENTTARGET"].ToString();控件 postbackControl = Page.FindControl(ControlID);lblStatus.Text = "ControlID=" + ControlID + "
";DropDownList dd = (DropDownList)postbackControl;lblStatus.Text += "SelectedIndex=" + dd.SelectedIndex.ToString();}捕获(异常前){lblStatus.Text += "
"+ ex.Message;}}var s = ddlCategories.SelectedIndex;}
请指导我缺少什么?
谢谢
解决方案我添加了一个隐藏字段,并且能够在回发后获得它的值.另一种解决方案是在查询字符串中发送值.
感谢所有回复.
I am using Sitefinity 11. I have created a Custom Widget for News Module, having Drop down for all available Categories, where I need to filter the News for Selected Category. The Control postback's but it's SelectedIndex is always ZERO.
I have checked the checkbox for "Enable View State for this page" and Page is using custom Layout Template.
The code in my .aspx file is given below:
<%@ 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>
EDIT: Even following code is getting the same result.
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;
}
please guide me what is missing?
Thanks
解决方案I have added a Hidden Field and I was able to get it's value after postback. Another solution was to send value in query-string.
Thanks for all replies.
这篇关于Sitefinity 11 无法在前端小部件控件回发时获取下拉选择值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
更多推荐
[db:关键词]
发布评论