gpt4 book ai didi

asp.net - 如何判断一个asp :ContentPlaceHolder has been populated in MVC?

转载 作者:行者123 更新时间:2023-12-05 00:08:55 25 4
gpt4 key购买 nike

我有一个带有内容控件的母版页。如果使用了特定的内容占位符,我希望它在加载期间执行特定的操作。

APageWithContent.aspx

<asp:Content ContentPlaceHolderID="myContent" runat="server">
<div>hello world!</div>
</asp:Content>

MasterPage.aspx
<asp:ContentPlaceHolder ID="myContent" runat="server" />

在使用母版的页面上,它们是否为此占位符提供任何内容是可选的。

我希望能够在母版页中的加载和预渲染事件期间判断当前页面上是否有我的占位符的内容。

MasterPage.aspx.cs
void Page_Init( object sender, EventArgs e )
{
if( /* myContent is populated */ )
//do something
}

有谁知道如何辨别这个?

在 WebForms 中,您可以检查控件:
myContent.Controls.Count > 0

但对于 MVC View ,这似乎总是 0。

最佳答案

我通过检查 myContent.Controls.Count. 来做到这一点。但是,您显然需要考虑可能添加的任何默认控件。

例如,如果您将内容占位符定义为:

<asp:ContentPlaceHolder ID="myContent" runat="server">
</asp:ContentPlaceHolder>

然后你会得到一个 LiteralControl在包含“\r\n”的控件集合中(因为解析了定义中的换行符)。

因此,如果您将其删除并定义为:
<asp:ContentPlaceHolder ID="myContent" runat="server"></asp:ContentPlaceHolder>

然后您可以在母版页加载中进行检查:
if (myContent.Controls.Count > 0)
// do stuff when populated with content..

只需确保您测试代码以确保您实际检查的是内容页面添加的内容,而不是主页面中定义的任何默认内容。

更新

编辑后说这个问题是 MVC-only 我可以确认我是 无法复制 .我在 MVC 应用程序中使用了与上面相同的代码,它的工作方式与预期和描述的完全一样。

你能发布一些你所拥有的示例代码吗?

仅供引用 - 这是[工作]代码:

Site.Master
<asp:ContentPlaceHolder ID="myContent" runat="server"></asp:ContentPlaceHolder>

<% if (myContent.Controls.Count > 0) { %>
<b>Content Added!</b>
<% } %>

索引.aspx
<asp:Content ContentPlaceHolderID="myContent" ID="myContent" runat="server">
This will render and the "Content Added!" will also be rendered.
</asp:Content>

<%-- This will cause the "Content Added!" to be displayed but with no visual content --%>
<asp:Content ContentPlaceHolderID="myContent" ID="myContent" runat="server">
</asp:Content>

<%-- This will NOT render the "Content Added!" since there is zero content between tags --%>
<asp:Content ContentPlaceHolderID="myContent" ID="myContent" runat="server"></asp:Content>

关于asp.net - 如何判断一个asp :ContentPlaceHolder has been populated in MVC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/964271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com