Textbox not updating on page load ASP.net
我的网页加载时有一个动态构建的表格,其中包含用户可以更改的默认文本框。对用户输入值也有一些验证(例如,输入不能小于零)。当用户提交表格时,只存储有效的输入,并刷新页面,在重建时提取存储的值以填充表格。由于某种原因,文本框在提交和重新加载页面后仍会显示无效输入,即使它们不是持久的,并且标签不会发生此问题。
文本框控件中是否有专门内置的内容导致此问题?是否有存储状态的地方,也许(我尝试将
文本框内置在从 Page_Load 事件调用的方法中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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); } |
如果需要更多信息来帮助解决此问题,请告诉我。
刚刚想通了,有点糟糕,我刚刚在 PreRender 事件中填充了数据,它工作得很好,感谢所有输入。
编辑:
重现您的问题后,我得出以下结论。
我相信问题不在于视图状态,而是 asp 只是重新填充这些值,因为您提交的表单数据与您返回的输入元素具有相同的名称。
即使您动态生成它们,因为您将它们添加到同一个 div 中,结果总是相同的。这使我有两个解决方案:):
我的解决方案 nr 3 仍然有效,我试了一下,按钮点击重定向按预期工作,没有发布的数据爬回我的文本框。
该语句负责:
1 | Response.Redirect("~/test.aspx"); |
另外,您可以生成一个随机 ID,以确保您返回的输入字段名称与提交的名称不同。您不必更改所有名称,但如果表 ID 不同,则整个表将不再填充提交的数据。
请注意,您可能需要在页面加载中使用 if(IsPostBack),因为您的数据将在页面加载后立即丢失(除非您在此之前处理保存)
如果你正在做一个回发,asp.net 使用它的视图状态来维护所有的文本框、文本字段和所有其他表单元素(包括隐藏的输入类型)。
我目前看到您的问题的 3 个解决方案:
您可以执行 ivowiblo 建议的操作,在从数据库加载数据之前(我假设您这样做),您可以擦除所有文本字段。在第一次访问时,这将是毫无意义的,因为它们是空白的。但是在回发之后,它实际上会擦除文本字段。
您可以禁用这些文本框上的视图状态,以便 asp 不会保留该状态。我不确定为什么您的测试不起作用,但它应该起作用。如果您选择这种方法,请随时使用一些实际代码编辑您的问题
我个人最喜欢的:重定向页面。不只是返回结果并导致回发到页面,请执行以下操作:用户点击保存按钮后,您可以保存数据,然后执行 Response.Redirect 到当前页面。浏览器将被重定向到页面并且不涉及视图状态。