2012-02-22 5 views
2

Это разочаровывает, я хочу просто создать новый input field внутри div на моей странице aspx, когда нажата кнопка button. Я использую функцию javascript witch, добавляет новый дочерний элемент (поле ввода) в существующий div. Все это выглядит следующим образом:Я создаю элемент html div, но он сразу исчезает в ASP.NET.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs" Inherits="Pages_test" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
    <script type="text/javascript"> 

     function clone() { 
      var html = document.createElement("input"); 
      html.setAttribute("id", 1); 
      html.setAttribute("name", "dejan"); 
      html.setAttribute("value", "some text"); 
      html.setAttribute("type", "text"); 
      document.getElementById("panj").appendChild(html); 
     } 

    </script> 
</head> 
    <body> 
     <form id="form1" runat="server"> 
      <div id="panj"> 
       Djubrov 
      </div> 
      <asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="clone()" /> 
     </form> 
    </body> 
</html> 

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

+1

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

+0

Как я могу создать новый элемент, когда происходит какое-то событие, вызванное пользователем, и сделать его видимым на одной странице? –

ответ

0

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

<asp:TextBox ID="yourTextboxID" Visible="False" runat="server" /> 

При нажатии на кнопку, обрабатывать событие в коде позади и сделать текстовое поле видимым:

yourTextboxID.Visible = True; 

Viewstate будет сохранять значения по обратной стороне.

Если каждая кнопка пресса должна создать дополнительное текстовое поле, вы также можете сделать это в коде, т.е. использовать заполнитель в ASCX, а затем прикрепить новое текстовое поле к нему с каждым нажатием кнопки:

yourPlaceholderID.Controls.Add(new TextBox() { ID = "textbox1" }); 
1

Ваша кнопка генерирует запрос на сервер, а последующий ответ переписывает страницу новым HTML-документом. Возвращение false из функции JavaScript, чтобы предотвратить asp:Button постбэк:

function clone() { 
    // your above code 
    return false; 
} 

и изменить кнопку, как

OnClientClick="return clone()" 

Если ваш asp:Button не требует взаимодействия с сервером, считают что делает его <button> или <input type='button' />.

+0

Я пробовал с ложью, но это не имеет значения. Actualy Я создал этот exapmle, чтобы понять, как сделать что-то еще. В реальном мире у меня будут кнопки на странице, и когда пользователь нажимает на них, я заберу соответствующее имя, использую имя в базе данных, чтобы выбрать соответствующий элемент, а затем отобразить новые div, заполненные информацией из базы данных. –

+0

@stanislav Вам нужно будет перейти от 'clone()' к 'return clone()'. см. обновление – paislee

+0

Хорошо, это делает трюк. Но теперь, как я могу использовать значение генерируемого текстового поля в коде позади (C#)? –

7

Каждый раз, когда вы нажимаете эту кнопку, это вызывает обратную передачу.

Фикс его останавливая постбэк следующим образом:

<asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="clone(); return false;" /> 
+0

Это работает. Но как сделать текстовое поле видимым в источнике страниц? –

+0

Попробуйте использовать свойство innerHTML: document.getElementById ('tes_div'). InnerHTML = ''; – skub

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

  • Нет связанных вопросов^_^