簡體   English   中英

用戶控件的內部屬性不支持代碼塊,但面板中是否支持代碼塊?

[英]Code blocks not supported in inner property of user control, but are supported in panel?

我有一個UserControl,其工作方式非常類似於<asp:Panel>

雖然面板可以做到這一點:

<asp:Panel runat="server">
    <img src='<%= ResolveUrl("~/img.png")%>' />
</asp:Panel>

使用我的控件嘗試操作時出現錯誤:

<uc1:NotPanel runat="server">
    <img src='<%= ResolveUrl("~/img.png")%>' />
</uc1:NotPanel>

錯誤:在此上下文中不支持代碼塊

NotPanel的引用方式如下:

<%@ Register Src="~/Controls/NotPanel.ascx" TagName="NotPanel" TagPrefix="uc1" %>

並定義如下(這是完全精簡的版本):

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="NotPanel.ascx.cs" Inherits="MyNamespace.NotPanel" %>
<div class="something">
    <asp:PlaceHolder ID="phControls" runat="server" />
</div>

具有以下代碼:

[ParseChildren(true, "Content")]
[PersistChildren(false)]
public partial class NotPanel : System.Web.UI.UserControl
{   
    [PersistenceMode(PersistenceMode.InnerDefaultProperty)]
    public Control Content { get; set; }

    public void Page_Init(object sender, EventArgs e)
    {
        phControls.Controls.Add(Content);
    }
}

我對此類的定義做錯了什么,我不能使用代碼塊? 還是這是UserControls的限制?

當將文本框放置在這些控件之一中時,會發生一個相關的問題(可能是相同的原因)- 不在同一控件中的<asp:CompareValidator>無法引用它,而不會出現以下錯誤:

找不到由“ compareValidator”的“ ControlToCompare”屬性引用的控件標識“ txtCompareTo”。

同樣,將<uc1:NotPanel>替換為<asp:Panel>時,此方法工作正常。 有什么可以做的使這項工作嗎?

據我所知(我會很高興地得到糾正),您無法將這樣的代碼塊注入到用戶控件中。

用戶控件基本上是微型獨立頁面,通常與其父級隔離。 而且它們並不是真正的自定義Web控件,如名稱所示。

但是,您可以通過屬性傳遞值。 因此,在用戶控件中,ascx.cs包含以下內容:

private string _myImagePath;
public string MyImagePath
{
    get
    {
        return _myImagePath;
    }
    set
    {
        _myImagePath = value;
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    //do stuff
}

然后,您可以執行<uc1:NotPanel runat="server" MyImagePath="Foo" />

要么

在ASPX中: <uc1:NotPanel runat="server" ID="MyUserControl" />並在代碼隱藏中: MyUserControl.MyImagePath = "Foo";

這聽起來很奇怪,但是如果在包含代碼塊的標記代碼周圍放置<asp:PlaceHolder>控件,則運行時錯誤可能會消失。

不過,Intellisense可能會有所抱怨。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM