Данные не изменяются в TextBox
Хорошо, я ходил с этим часами (поиск и т. Д.). Это то, что я хочу сделать, я хочу загрузить данные в текстовое поле, и если пользователь изменяет текст в текстовом поле, я хочу иметь возможность сохранить новый текст.
Моя проблема в событии TxtBox_TextChanged: данные, содержащиеся в текстовом поле txtNarrative, представляют собой новые данные, введенные пользователем (<>ABCD), но в событии btnSubmit_Click данные, содержащиеся в txtNarrative, представляют собой исходное значение ABCD.
Что я делаю неправильно??
<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="WorkBench_VBNet._Default" %>
<!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">
<div>
<fieldset>
<span class="title">Entry Form</span>
<ul class="pageitem">
<li class="Narrative">
<asp:TextBox EnableViewState=true ID="txtNarrative" placeholder="Narrative" Width="100%"
Rows="10" TextMode="multiline" runat="server" Height = "100%" OnTextChanged="TxtBox_TextChanged" >
</asp:TextBox></li>
<li class="Submit">
<asp:LinkButton ID="btnSubmit" runat="server">Submit</asp:LinkButton>
</li>
</ul>
</fieldset>
</div>
</form>
</body>
</html>
Код позади:
Public Class _Default
Inherits System.Web.UI.Page
Public Event TextChanged As EventHandler
Protected Sub TxtBox_TextChanged(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles txtNarrative.TextChanged
ViewState("txtNarrative") = txtNarrative.Text ''<-- The text here is the changed text not ABCD
txtNarrative.Text = ViewState("txtNarrative").ToString
End Sub
Private Sub btnSubmit_Click(sender As Object, e As System.EventArgs) Handles btnSubmit.Click
Dim Narrative as String = txtNarrative.Text '<-- the text in the text box is still ABCD not what was changed.
''Code to update data in the Database goes here
End Sub
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
txtNarrative.Text = "ABCD"
End If
End Sub
End Class
2 ответа
Избавиться от TxtBox_TextChanged
Саб, это не нужно, IPostBackDataHandler
из TextBox
сделаю это для вас:
<asp:TextBox EnableViewState=true ID="txtNarrative" placeholder="Narrative" Width="100%"
Rows="10" TextMode="multiline" runat="server" Height = "100%" >
</asp:TextBox>
Я не уверен, что понимаю ваш вопрос, но:
Вам не нужно добавлять текстовое поле "OnTextChanged" в разметку.
В вашем коде позади вас уже есть дескрипторы декларации.
Если вы используете оба ("OnTextChanged" в html-разметке и обрабатывает свой код сзади), событие текстового поля будет инициировано дважды.
Protected Sub TxtBox_TextChanged (ByVal sender As Object, _
ByVal e As System.EventArgs) Handles txtNarrative.TextChanged
ViewState ("txtNarrative") = txtNarrative.Text''<-- The text here text is not changed the ABCD
txtNarrative.Text = ViewState ("txtNarrative"). ToString
end Sub
<asp: TextBox EnableViewState = true ID = "txtNarrative" placeholder = "Narrative" Width = "100%"
Rows = "10" TextMode = "multiline" runat = "server" Height = "100%">
</ asp: TextBox>
также проверил ваш код, и отправленное значение является новым значением в текстовом поле. (Т.е. если я понимаю твой вопрос)
Надеюсь это поможет