Динамически создавать элементы управления с помощью stringbuilder - PullRequest
2 голосов
/ 12 марта 2010

Я пытался динамически создавать элементы управления на своей веб-странице, используя класс StringBuilder ... и я не совсем понимаю ... любая помощь будет оценена.

Я пытаюсь сделать это ...

StringBuilder sbTest = new StringBuilder(string.Empty);

sbTest.Append("<input type=\"text\" id=\"txt1\" runat=\"server\" />");

Response.Write(sbTest.ToString());

На странице наверняка отображается TextBox в браузере, который легко доступен через JavaScript ... но я хочу, чтобы элемент управления был также доступен на стороне сервера ..., чтобы при публикации страницы обратно Сервер я могу легко получить значение, которое было введено пользователем в текстовое поле.

Может ли кто-нибудь 1, пожалуйста, помогите мне с этим ....

Большое спасибо ....

Ответы [ 4 ]

2 голосов
/ 12 марта 2010

В ответе почти о том, что я ответил этом

Вы должны делать все правильно, а не пытаться изобретать велосипед.

Создание элементов управления. Динамически вы можете выбрать 2 способа: .NET или Javascript.

Оба видятся любым другим, другими словами, создавая элементы управления с помощью .NET, javascript может видеть и использовать его, и наоборот.

.NET way

в ваш HTML-файл добавьте что-то вроде

<body>
   <form id="form" runat="server">
      <asp:PlaceHolder id="ph" runat="server" />
   </form>
</body>

в вашей части скрипта

TextBox txt = new TextBox();
txt.ID = "myTxt";

ph.Controls.Add(txt);

Вы можете легко получить этот TextBox в JavaScript, используя:

var myTxtValue = $("#myText").value();

Javascript Way

var txt = $("<input />", {
             id : "myTxt"
          });

txt.AppendTo("body");

в .NET вы получаете значение, используя

string value = Request["myTxt"];

ПРИМЕЧАНИЕ Все строки JavaScript используют jQuery для упрощения результатов

2 голосов
/ 12 марта 2010

Как Торбьерн Ханссон говорит, что если вы просто добавите атрибут name (и, возможно, удалите runat = "server" из исходного фрагмента) иметь возможность доступа к переданному значению, но у вас будет только клиентский HTML-элемент .

Если вы хотите динамически создавать серверные элементы управления, вам придется сделать что-то вроде этого:

TextBox textbox = new TextBox {
    /* take care to create unique ID's if you're adding more than 1 TextBox */
    ID = "foo", 
    Text = "bar"
};

Controls.Add(textbox);
1 голос
/ 12 марта 2010

Укажите имя-атрибут и получите к нему доступ:

Request.Form["txt1"]
0 голосов
/ 12 марта 2010

Вы можете получить значение от

Request["txt1"]
...