2016-05-09 7 views
0

私は<asp:Panel>とよく似たUserControlを持っています。ユーザコントロールの内部プロパティではサポートされていませんが、パネルでサポートされているコードブロックはありますか?

パネルには、これを行うことができますが:

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

error: Code blocks are not supported in this context

NotPanelはそうのように参照されています:

<%@ Register Src="~/Controls/NotPanel.ascx" TagName="NotPanel" TagPrefix="uc1" %> 
私のコントロールでこれをしようとしたとき

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

私はエラーを取得します

と定義されています(これはgrosですSLY削ぎ落としたバージョン):

<%@ 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> -

(おそらく同じ原因で)関連する問題は、テキストボックスは、これらのコントロールのいずれかの内部に配置されたときに発生します

Unable to find control id 'txtCompareTo' referenced by the 'ControlToCompare' property of 'compareValidator'.

<uc1:NotPanel><asp:Panel>に置き換えられても、これはうまくいきます。この仕事をするために何かできることはありますか?

答えて

0

あなたが知っている限り(私はうれしく訂正されます)、そのようなコードブロックをユーザーコントロールに注入することはできません。

基本的にミニスタンドアロンページとしてのユーザーコントロールは、通常、親から隔離されています。名前のような実際のカスタムWebコントロールではありません。

ただし、プロパティから値を渡すことはできます。 <uc1:NotPanel runat="server" ID="MyUserControl" /> と分離コードで:MyUserControl.MyImagePath = "Foo";

+0

ありがとうございますが、この特定のケースを解決するには、このコントロールのユースケースは、新しいものと既存のマークアップのさまざまなブロックの "ラッパー"として、特定のコンテンツの処理を追加したくありませんコントロール自体に。 – FTWinston

+1

@FTWinston次に、ユーザーコントロールではなくカスタムコントロール(ASP.NETサーバーコントロール)を調べる必要があります。http://www.codeproject.com/Articles/28783/Your-First-ASP-NET-CustomControlを参照してください。 –

+0

CustomControlを使用していて、同じエラーが発生しました:このコードブロックはこの機能ではサポートされていませんコンテキスト。 – FTWinston

0

これあなたが<uc1:NotPanel runat="server" MyImagePath="Foo" />

OR ASPXで

を行うことができます次に

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

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

:だからあなたのユーザーコントロールascx.csのようなものが含まれていますあなたのコードブロックを含むマークアップコードの周りに<asp:PlaceHolder>のコントロールを置くと、ランタイムエラーが消えてしまうでしょう。

しかし、Intellisenseは少し文句を言うかもしれません。

関連する問題