Asp.Net:是否可以通过其母版页中设置的值来过滤内容页中的列表?

发布于 2024-08-24 03:24:49 字数 89 浏览 3 评论 0原文

是否可以通过母版页中设置的值来过滤内容页中的列表?我的意思是,当用户单击主页中的链接按钮时,会设置一个变量,然后根据该变量的值,在加载内容页面时,会过滤其中的列表?

Is it possible filtering a list in a content page by a value set in its master page? I mean when a user clicks on a link button in master page a variable is set and then based on the value that variable, when loading a content page, a list in it is filtered?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

帅气称霸 2024-08-31 03:24:49

是的,绝对是。唯一的技巧是将 Page.Master 转换为您正在使用的母版页类型。

这是我编写的一个简单示例:

MasterPage.master

<asp:Button runat="server" ID="btnToggleEvensOnly" Text="Toggle Even Number Filtering" OnClick="btnToggleEvensOnly_Click" />
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>

MasterPage.master.cs

public bool IsFiltered
{
    get
    {
        return ViewState["isFiltered"] == null ? false : (bool) ViewState["isFiltered"];
    }
    set
    {
        ViewState["isFiltered"] = value;
    }
}

protected void btnToggleEvensOnly_Click(object sender, EventArgs e)
{
    IsFiltered = !IsFiltered;
}

Default.aspx

<asp:Content ContentPlaceHolderID="ContentPlaceHolder1" runat="server" >
<asp:Repeater runat="server" ID="rptList">
    <HeaderTemplate>
        <table>
    </HeaderTemplate>
    <ItemTemplate>
        <tr><td><%# Eval("i") %></td></tr>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>
</asp:Content>

Default.aspx.cs

protected override void OnPreRender(EventArgs e)
{
    List<MyItem> items = new List<MyItem>();
    for (int i = 0; i < 10; i++)
    {
        items.Add(new MyItem { i = i });
    }

    var query = items.AsEnumerable();
    if (((MasterPage)Master).IsFiltered)
    {
        query = query.Where(mi => mi.i % 2 == 0);
    }

    rptList.DataSource = query;
    rptList.DataBind();

    base.OnPreRender(e);
}

public class MyItem
{
    public int i { get; set; }
}

Yes, definitely. The only trick is to cast Page.Master to the type of master page that you're using.

Here's a quick example I whipped up:

MasterPage.master

<asp:Button runat="server" ID="btnToggleEvensOnly" Text="Toggle Even Number Filtering" OnClick="btnToggleEvensOnly_Click" />
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>

MasterPage.master.cs

public bool IsFiltered
{
    get
    {
        return ViewState["isFiltered"] == null ? false : (bool) ViewState["isFiltered"];
    }
    set
    {
        ViewState["isFiltered"] = value;
    }
}

protected void btnToggleEvensOnly_Click(object sender, EventArgs e)
{
    IsFiltered = !IsFiltered;
}

Default.aspx

<asp:Content ContentPlaceHolderID="ContentPlaceHolder1" runat="server" >
<asp:Repeater runat="server" ID="rptList">
    <HeaderTemplate>
        <table>
    </HeaderTemplate>
    <ItemTemplate>
        <tr><td><%# Eval("i") %></td></tr>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>
</asp:Content>

Default.aspx.cs

protected override void OnPreRender(EventArgs e)
{
    List<MyItem> items = new List<MyItem>();
    for (int i = 0; i < 10; i++)
    {
        items.Add(new MyItem { i = i });
    }

    var query = items.AsEnumerable();
    if (((MasterPage)Master).IsFiltered)
    {
        query = query.Where(mi => mi.i % 2 == 0);
    }

    rptList.DataSource = query;
    rptList.DataBind();

    base.OnPreRender(e);
}

public class MyItem
{
    public int i { get; set; }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文