Заменить строку с элементом управления - PullRequest
1 голос
/ 15 февраля 2010

У меня есть строка со специальными символами, вставляемая в разные места. Например:

string myString = "This is a textbox: ##";

Я бы хотел заменить ## элементом управления (а именно текстовым полем).

Метод Replace позволяет заменить строку только другой строкой или символом (понятно). Но что было бы лучшим способом динамически заменить ## на элемент управления в его положении?

Я подумал, может быть, я смогу заменить его на HTML-разметку, которая будет выполняться, но не совсем уверен, как этого добиться.

Спасибо

РЕДАКТИРОВАТЬ : чтобы уточнить некоторые детали. Строки извлекаются из базы данных, поэтому я не могу использовать элемент управления PlaceHolder. Пользователь выбирает строку из выпадающего списка. Значением элемента является строка со специальными символами. Когда происходит обратная передача из выбора элемента, я хотел бы отобразить строку на сайте, но заменить специальные символы полностью работающим элементом управления (в данном случае текстовым полем)

Ответы [ 5 ]

1 голос
/ 15 февраля 2010

Примерно так:

Panel panel = new Panel();
string myString = "This is a textbox: ##";
// some parsing logic
string[] arr = { "This is a textBox", "##" };

foreach(var item in arr)
{
  if (item == "##"){
    TextBox tb = new TextBox();
    panel.Controls.Add(tb);
  }
  else{
    Label l = new Label();
    l.Text = item;
    panel.Controls.Add(l);
  }
}

your_plaaceholder.Controls.Add(panel);
1 голос
/ 15 февраля 2010

Рассмотрите возможность использования метода TextBox Render(). Вы получите HTML-код, который будет выводиться из этого TextBox.

Затем вы можете использовать эту строку в качестве замещающего текста для замены ## части вашей строки.

Визуализация TextBox () на MSDN

var myTxtBox = new TextBox();
myTxtBox.Text = "Hello World";

//implement the Render code in here
string myRenderedTextBoxHTML = RenderIt(myTxtBox); 

string myString = "This is a textbox: " + myRenderedTextBoxHTML;

Я не уверен, что ViewState будет доступен для этого элемента управления или нет.

0 голосов
/ 16 февраля 2010

Что сказал Сэш, НО убедитесь, что вы помещаете это в Page.Init () каждый раз, если хотите воспользоваться преимуществами viewstate.

0 голосов
/ 15 февраля 2010

Вы действительно можете заменить его на разметку:

string mystring = "This is a textbox: ##".Replace("##", "<input type='text'/>");
Response.Write(mystring);

Я не уверен, почему ты хотел бы сделать это, хотя. Почему бы не использовать элемент управления PlaceHolder и просто вставить текстовое поле в код позади него?

0 голосов
/ 15 февраля 2010
myString = string.Replace("##", "<input type='text' />");

Обратите внимание, что это , а не элемент управления: это будет просто элемент HTML, который не будет подключен на стороне сервера позже. И в зависимости от того, что вы делаете со строкой, возможно, даже не так много, поскольку некоторые элементы управления (например, метка) автоматически экранируют ваши символы < и >.

Если вы действительно хотите полностью работающий элемент управления asp.net, нам нужно больше узнать о том, как вы добавляете эту строку на страницу.

...