Значение текстового поля не очищается - PullRequest
2 голосов
/ 09 сентября 2011

В приведенном ниже коде значение TextBox не очищается после нажатия кнопки.

Default.aspx

<!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>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <br />
    <asp:Timer ID="Timer1" runat="server" ontick="Timer1_Tick" Interval="20">
    </asp:Timer>
    <br />
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <Triggers>
                <asp:AsyncPostBackTrigger controlid="Timer1" eventname="Tick" />
            </Triggers>
        <ContentTemplate>
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    <asp:Repeater ID="Shout_Box" runat="server">
            <ItemTemplate>
               <%# DataBinder.Eval(Container.DataItem, "Message") %>
            </ItemTemplate>
        </asp:Repeater>

        <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
        </ContentTemplate>
    </asp:UpdatePanel>
    <asp:TextBox ID="TextBox1" runat="server">
        </asp:TextBox>
    </form>
</body>
</html>

C # код для нажатия кнопки.

protected void Button1_Click(object sender, EventArgs e)
{
    string MyConString = "DRIVER={MySQL ODBC 3.51 Driver};" + "SERVER=localhost;" + "DATABASE=repeater;" + "UID=root;" + "PASSWORD=********;" + "OPTION=3";
    OdbcConnection MyConnection = new OdbcConnection(MyConString);
    OdbcCommand cmd = new OdbcCommand("INSERT INTO table1(message)VALUES(?)", MyConnection);
    cmd.Parameters.Add("@email", OdbcType.VarChar, 255).Value = TextBox1.Text;
    MyConnection.Open();
    cmd.ExecuteNonQuery();
    MyConnection.Close();
    TextBox1.Text = "";
}

Я попытался добавить строку, как указано выше TextBox1.Text = "";, чтобы очистить текст, но безрезультатно. Пожалуйста, не просите меня держать Button вне тега updatepanel. Мне нужно, чтобы мероприятие было проведено без публикации обратной страницы.

Если TextBox находится внутри Из-за триггера таймера на 20 секунд, текстовое поле слишком мигает и не позволяет редактировать. Проще говоря, TextBox обновляет и не позволяет добавить ни единого фрагмента текста.

Я не хочу расширять это на JavaScripts и другие, чтобы очистить значение в текстовом поле. Кто-нибудь может сказать мне, как очистить значение текстового поля с помощью C #.

Ответы [ 5 ]

3 голосов
/ 09 сентября 2011

Используйте другую панель обновления и в Page_Load добавьте функцию UpdatePanedid.Update(); Надеюсь, это вам поможет.

2 голосов
/ 09 сентября 2011

текстовое поле1 должно быть внутри </ContentTemplate></asp:UpdatePanel> Только то, что внутри панели обновления будет обновляться при нажатии кнопки

1 голос
/ 14 октября 2011

Для меня сработало использование chromes и проверка элемента combobox для имени html, которое дает ему браузер, и использование этого кода:

ScriptManager. *

ctl00_m_g_8559e7aa_7fc2_4e23_b9b5_bf638f7e2699_ctl00_cboCustomers_TextBox

- уникальное имя, данное при рендеринге, я уверен, что имя не меняется

1 голос
/ 09 сентября 2011

Вы говорите, что не хотите использовать Javascript и хотите использовать C #, но что если вы могли бы написать Javascript на C # и выполнить его на клиенте после завершения частичной обратной передачи из UpdatePanel?

Вы можете добавить следующее к вашему методу Button1_Click:

ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "myScript", "document.getElementById('" + TextBox1.ClientID + "').value = '';", true);

Приведенный выше фрагмент кода выполняет Javascript на клиенте после частичной обратной передачи и устанавливает значение TextBox1 в пустую строку.

1 голос
/ 09 сентября 2011

Перемещение текстового поля внутри панели обновления.Ваша кнопка запускает перезагрузку только содержимого UpdatePanel, а не только его содержимого.

...