在将转发器与其他ObjectDataSourceID绑定后更改我的控件状态

本文关键字:我的 控件状态 绑定 ObjectDataSourceID 转发器 其他 | 更新日期: 2023-09-27 18:01:01

我的博客网站(WIP(上有一个奇怪的问题,我还没有找到解决方案。我有一个中继器,它从一个名为dsGetArticlesObjectDataSourceID的SQL数据库中获取所有文章。

我想做的是,当有人点击一篇文章时,我将ObjectDataSourceID更改为dsGetArticle。到目前为止,一切都很好,我看到的是一篇文章,而不是所有的文章。

现在,在我检查了用户是否登录后,我想添加/删除编辑功能,所以如果用户没有登录,显然他不允许更改文章或评论。

因此,当页面加载而用户未登录时,我将带有编辑功能的面板设置为不可见。这是有效的,但只要他点击文章(而不是回发(,编辑函数就会再次可见,尽管它遍历了后面的代码,使面板不可见。

只有当我更改ObjectDataSourceID并对其进行数据绑定时,才会出现问题

这是我的代码索引:(标准面板可见(

if (!IsPostBack)
        {
            if (Request.QueryString["articleID"] != null)
            {
                repArticles.DataSourceID = "dsGetArticle";
            }
            else
            {
                repArticles.DataSourceID = "dsGetArticles";
            }
            repArticles.DataBind();
        }
        if (!User.Identity.IsAuthenticated)
        {
            foreach (RepeaterItem ri in repArticles.Items)
            {
                Panel pnlArticleFunctions = ri.FindControl("pnlArticleFunctions") as Panel;
                pnlArticleFunctions.Visible = false;
            }
        }

我也尝试过使用Linkbutton,这样我就可以通过回发来完成,但我得到了同样的结果,没有面板是不可见的:

protected void lbLink_Click(object sender, EventArgs e)
    {
        repArticles.DataSourceID = "dsGetArticle";
        repArticles.DataBind();
        foreach (RepeaterItem ri in repArticles.Items)
        {
            Panel pnlTest = ri.FindControl("pnlTest") as Panel;
            pnlTest.Visible = false;
        }
         //doesnt become invisible
    }

在将转发器与其他ObjectDataSourceID绑定后更改我的控件状态

除了您放置的第二个代码块之外,您确定if(!User.Identity.IsAuthenticated)部分不在if(!IsPostBack)块中吗?因为从你所说的来看,IsAuthenticated部分似乎只有在没有回发的情况下才被执行。

相关文章: