文本框未在页面加载ASP.net上更新

时间:2012-05-10 23:12:55

标签: asp.net viewstate page-lifecycle

我在网页的页面加载上有一个动态构建的表,其中包含可以由用户更改的默认值的文本框。对用户输入值也有一些验证(例如,输入不能小于零)。当用户提交表时,仅存储有效输入,并刷新页面,拉出存储的值以在重建表时填充表。由于某些原因,文本框在提交和重新加载页面后仍会显示无效输入,即使它们不是持久性的,并且标签也不会出现此问题。

文本框控件中是否有特定内容导致此问题?是否存在存储状态的某个地方(我尝试将ViewState标志设置为false)?这仅仅是页面生命周期的一部分吗?

文本框是在从Page_Load事件

调用的方法中构建的
void Page_Load(object sender, EventArgs e)
{
//page initialization...
ValidateData(); //This is where the current data is verified, and stored if valid
BuildTable(); //This takes that stored value for the text
}

void BuildTable
{ 
tbTable = new Table();  
tbRow = new TableRow();
tbCell = new TableCell();
TextBox tb = new TextBox();
tb.text = some stored value;
tbCell.Controls.Add(tb);
tbRow.Cells.Add(tbCell);
tbTable.Rows.Add(tbRow);
divFromPage.Controls.add(tbTable);
}

如果需要更多信息来帮助解决此问题,请与我们联系。

2 个答案:

答案 0 :(得分:0)

编辑: 在重现你的问题后,我得出以下结论。 我认为问题不在于viewstate,而是asp只是重新填充这些值,因为您提交的表单数据与您返回的输入元素具有相同的名称。
即使你动态生成它们,因为你将它们添加到同一个div中,结果总是相同的。这导致我有2个解决方案:):
我的解决方案nr 3仍然存在,我尝试了它并按下按钮点击重定向按预期工作,没有发布的数据爬回到我的文本框中。
本声明负责:

Response.Redirect("~/test.aspx");

另外,您可以生成一个随机ID,以确保您返回的输入字段名称与提交的名称不同。您不必更改所有名称,但如果表ID不同,则整个表将不再填充提交的数据。

请注意,您的页面加载中可能需要if(IsPostBack),因为您的数据将在页面加载后立即丢失(除非您在此之前处理保存)

<小时/> 如果您正在进行回发,asp.net使用它的viewstate来维护所有文本框,文本字段和所有其他表单元素(包括隐藏的输入类型)。
我目前看到3个问题的解决方案:
你可以做ivowiblo建议的,在你从数据库加载数据之前(我假设你这样做)你可以擦除所有的文本字段。在第一次访问时,这将是毫无意义的,因为它们是空白的。但是在回发后它实际上会擦除文本字段。

您可以在这些文本框上禁用视图状态,这样asp就不会保持状态。我不确定为什么你的测试不起作用,但它应该工作。如果您选择此方法,请随意使用一些实际代码编辑您的问题

我个人最喜欢的:重定向页面。只需返回结果并导致回发到页面,执行以下操作:在用户点击保存按钮后,您可以保存数据,然后执行Response.Redirect到当前页面。浏览器将被重定向到页面,不会涉及任何视图状态。

答案 1 :(得分:0)

刚想出来,有点像D'哦那一刻,我只是填充了PreRender事件中的数据,它运行得很好,感谢所有的输入。