Запретить Visual Studio от добавления дочерних элементов управления - PullRequest
0 голосов
/ 28 октября 2011

У меня тут немного странная проблема. Я создал собственный элемент управления как таковой:

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

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

}

При работе в режиме конструктора Visual Studio я всегда добавляю на страницу одно из своих текстовых полей:

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

Visual studio имеет привычку изменять мою разметку следующим образом:

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

Это изменяет окончательную разметку вывода так, что появляются два текстовых поля. Есть ли способ помешать визуальной студии сделать это?

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>

Ответы [ 2 ]

1 голос
/ 28 октября 2011

Я думаю, это происходит потому, что ваш класс наследует от элемента управления PlaceHolder, который реализует класс TemplateControl.Я не знаю, была ли причина для этого, но кажется, что было бы более уместно, если бы вы унаследовали от элемента управления TextBox.

РЕДАКТИРОВАТЬ

Поскольку вы используете логику для рендеринга одного из нескольких элементов управления, я бы унаследовал класс WebControl.Это позволит вам визуализировать в основном все, что вы хотите.Хотя я должен признать, что то, что вы пытаетесь сделать, вероятно, потребует значительного объема работы.

0 голосов
/ 29 октября 2011

Если я правильно понимаю проблему, у вас есть проблемы во время разработки, а не во время выполнения.

Если это так, вам следует обернуть код добавления элемента управления тестом, который гарантирует, что он выполняется только тогда,Вы не в режиме дизайна.Например:

    if ((!this.InDesignMode) && ( [certain criteria are met]))
    this.Controls.Add(new System.Web.WebControls.Textbox());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...