2010-02-15 2 views
1

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

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

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

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

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

Благодаря

EDIT: Для того, чтобы уточнить некоторые детали. Строки извлекаются из базы данных, поэтому я не могу использовать элемент управления PlaceHolder. Пользователь выбирает строку из раскрывающегося списка. Значение элемента - строка со специальными символами. Когда постбэк от выбора позиции, я хотел бы, чтобы отобразить строку на сайте, но заменить специальные символы с полностью рабочим контролем (в данном случае, текстовое поле)

+0

Чтобы убедиться, что я понимаю, это проект ASP.NET, и вы хотите динамически испускать элемент управления, где у вас есть этот специальный символ? Это верно? – smaclell

+0

Эй, да, это правильно.Специальные символы - это просто заполнители для того, где в строке должен идти элемент управления. – Skoder

+0

Почему вы не можете очистить Placeholder после обратной передачи и снова добавить все элементы управления? – sashaeve

ответ

1

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

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

TextBox Render() on 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

Эй, спасибо, я прочитаю об этом. – Skoder

+0

Я прочитал, но я не совсем понимаю. Какой HTMLWriter я могу передать в метод Render? Или мне нужно создать собственный пользовательский элемент управления, который расширяет текстовое поле? Спасибо – Skoder

0
myString = string.Replace("##", "<input type='text' />"); 

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

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

+0

Эй, тот же вопрос, что и выше. Будет ли этот метод работать с текстовыми полями ASP.NET? – Skoder

+0

Спасибо за ответ. Я уточню свой вопрос. – Skoder

+0

Строка может быть добавлена ​​любым способом, который позволил бы этому работать. На данный момент это просто буквальный контроль, но это можно изменить. – Skoder

0

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

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

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

+0

Эй, строки извлекаются из базы данных. Я попробую метод замены, но будет ли это работать с элементами управления ASP.NET (а не только стандартными элементами управления HTML?) – Skoder

+0

Вероятно, нет. Мне нравится метод pcampbell использования метода Render. –

1

Что-то вроде этого:

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); 
0

Что сказали Саши, но убедитесь, что вы положили, что в Page.Init() каждый раз, если вы хотите, чтобы воспользоваться ViewState.

Смежные вопросы