2011-10-28 10 views
0

私はここで少し奇妙な問題があります。Visual Studioで子コントロールを追加できないようにする

<myControls:Textbox id="txtTest" runat="server" /> 

Visual Studioは私のマークアップを変更する習慣を持っています

public class Textbox : System.Web.WebControls.Placeholder 
{ 

    if([certain criteria are met]) 
     this.Controls.Add(new System.Web.WebControls.Textbox()); 

} 

のVisual Studioのデザイナーモードで作業し、いつでも私はページへの私のテキストボックスの1を追加します。私は、次のようなカスタムコントロールを作成しました

<myControls:Textbox id="txtTest" runat="server" > 
    <asp:Textbox runat="server" /> 
</myControls:Textbox> 

これにより、最終出力マークアップが変更され、2つのテキストボックスが表示されます。ビジュアルスタジオがこれをやらないようにする方法はありますか?

EDIT:要求ごととして 、こちらのページのマークアップ

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="TestApp.Test" %> 
<%@ Register Assembly="MyControls.WebControls" Namespace="MyControls.WebControls" TagPrefix="myControls" %> 

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
<table> 
<tr> 
    <td> 
     <asp:Label ID="lblTest" runat="server">Test Label:</asp:Label> 
     <myControls:TextBox ID="txtTest" runat="server" Width="80px"></myControls:TextBox> 
    </td> 
</tr> 
</table> 
</asp:Content> 
+0

おそらくユーザーコントロールに問題があります。 – Icarus

+0

私はそうは思わない、VSは、ページをコンパイルして、テキストボックスが追加されるので、それを追加しますが、texboxが追加されないように条件が発生する可能性があると判断しています。 – mrK

+0

あなたのユーザコントロールのマークアップを投稿する – Icarus

答えて

1

は、あなたのクラスはTemplateControlクラスを実装PlaceHolderコントロールから継承するので、私はそれが起こっていると考えています。理由があるかどうかは分かりませんが、代わりにTextBoxコントロールから継承した方が適切と思われます。

EDIT

あなたは、いくつかのコントロールのいずれかをレンダリングするためのロジックを使用しているので、私が代わりにWebControlクラスから継承されます。これにより、基本的に必要なものをレンダリングすることができます。私が認めなければならないが、あなたがしようとしていることはおそらくかなりの量の作業を必要とすることだろう。

+0

hehe私は彼のコードをよく見てからコメントとして投稿しました; – Icarus

+0

ここでもう一度...;) –

+0

@Icarusプレースホルダから継承するのは、他の種類のコントロールをその内部に配置できるからです。テキストボックスの考え方は、DB内のレコードと一致するということです。これらのテキストボックスは、基本的にテキストボックス、コンボボックス、または提案ボックスです。この理由のためによく考えられていますが、私は長すぎる投稿を作成したくありません。私はそれが適切かどうか説明することができます。 – mrK

0

問題が正しく理解されていれば、設計時および実行時に問題が発生しています。

この場合は、コントロールを追加するコードを、デザインモードでないときにのみ実行されることを保証するテストで囲む必要があります。例:

if ((!this.InDesignMode) && ([certain criteria are met])) 
    this.Controls.Add(new System.Web.WebControls.Textbox()); 
関連する問題