我开始对一些完全平庸的事情感到不安:我没有从TextBox获得用户输入:S
我这样做(aspx背后的代码):
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this._presenter.OnViewInitialized();
}
this._presenter.OnViewLoaded();
txtBox1.Text = "blah";
}
protected void Button1_Click(object sender, EventArgs e)
{
//Do sth with txtBox1.Text but when I read it, it is still the same as when a loaded the page at Page_Load, So if I entered "blahblah" in the txtBox1 via browser the text I get when I debug or run is still "blah"
}
和aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="InsertStudent.aspx.cs" Inherits="IzPT.Vb.Views.InsertStudent"
Title="VnosProfesorja" MasterPageFile="~/Shared/DefaultMaster.master" %>
<asp:Content ID="content" ContentPlaceHolderID="DefaultContent" Runat="Server">
<h1>Student</h1>
<p>
<table style="width:100%;">
<tr>
<td style="width: 139px">
Name</td>
<td>
<asp:TextBox ID="txtBox1" runat="server"></asp:TextBox>
</td>
</tr>
</table>
</p>
<p>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Save" />
</p>
</asp:Content>
我还尝试使用DetailsView执行此操作并将其绑定到列表但是当我在编辑模式中读取值时,我遇到了同样的问题。
有什么想法吗?
答案 0 :(得分:5)
您在每个Page_Load上将文本框Text属性设置为“blah”。由于此时已加载ViewState,因此您将覆盖用户输入的任何值。
如果您只想将Text值设置一次,请确保将其放在if (!IsPostBack)
支票内。
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this._presenter.OnViewInitialized();
txtBox1.Text = "blah";
}
this._presenter.OnViewLoaded();
}
答案 1 :(得分:2)
您的问题是您正在更改Page_Load中的值!
Page_Load
在Button1_Click
之前运行。
将代码从Page_Load移至此
protected override void OnLoadComplete(EventArgs e)
{
txtBox1.Text = "blah";
}
或保护您的代码......就像这样
if (!this.IsPostBack)
{
txtBox1.Text = "blah";
}
答案 2 :(得分:1)
在回发期间调用Page_Load,重置文本框中的值。改为
if (!this.IsPostBack)
{
txtBox1.Text = "blah";
this._presenter.OnViewInitialized();
}
答案 3 :(得分:0)
我个人会在视图中有一个属性来设置演示者的文本框值。在OnViewInitialized()或OnViewLoaded()。