Я создаю HTML-элемент div, но он сразу исчезает в ASP.NET - PullRequest
2 голосов
/ 23 февраля 2012

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

<%@ 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>

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

Ответы [ 3 ]

7 голосов
/ 23 февраля 2012

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

Исправьте это, остановив обратную передачу следующим образом:

<asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="clone(); return false;" />
1 голос
/ 23 февраля 2012

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

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

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

OnClientClick="return clone()"

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

0 голосов
/ 23 февраля 2012

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

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

Когда кнопка нажата, обработайте событие в коде позади и сделайте текстовое поле видимым:

yourTextboxID.Visible = True;

Viewstate сохранит значения в обратных передачах.

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

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