我们偶尔会收到报告,其中 GridView 中的一组 DropDownBox 的值将重置为列表中的第一个值项。
我们最终将其归结为一个时间问题,即用户在页面完成渲染/加载数据之前单击“保存”,我们能够在生产服务器上复制它,但不能在本地复制,因为页面加载太快。
我们如何在服务器端检测到这一点,以知道返回的数据是无效的,或者停止设置用户未设置的数据?
我们偶尔会收到报告,其中 GridView 中的一组 DropDownBox 的值将重置为列表中的第一个值项。
我们最终将其归结为一个时间问题,即用户在页面完成渲染/加载数据之前单击“保存”,我们能够在生产服务器上复制它,但不能在本地复制,因为页面加载太快。
我们如何在服务器端检测到这一点,以知道返回的数据是无效的,或者停止设置用户未设置的数据?
是否考虑过仅在加载页面时才启用保存按钮?
另一个建议...下拉列表有ID吗?我有一些奇怪的问题,动态生成的控件没有id,回发后返回错误的值......
我遇到过同样的问题。在本地工作得很好,但偶尔的生产用户会以某种方式提交带有部分表单数据的页面。
从日志中我可以看到 HttpRequestFormVariables 看起来正常,然后值变成空白,这导致站点抛出未处理的异常。
ctl00$MainContentPlaceHolder$foo$rptForm$ctl01$txtFormFieldId = 3815 ctl00$MainContentPlaceHolder$foo$rptForm$ctl02$txtFormFieldId = 3816 ctl00$MainContentPlaceHolder$foo$rptForm$ctl03$txtFormFieldId = 3817 ctl00$MainContentPlaceHolder$foo$rptIdField$ctl = 3818 ctl00$MainContentPlaceHolder$foo$rptForm$ctl05$txtFormFieldId = ctl00$MainContentPlaceHolder$foo$rptForm$ctl05$txtFormFieldId =
我能够重现它的唯一方法是在页面中添加一些 Javascript 以使其在完全加载之前提交。
<script type="text/javascript">
$("input[id$='btnSubmit']").click();
</script>
我怀疑我需要在禁用状态下从服务器发回 btnSubmit,然后在页面完成加载后从 Javascript 启用它。
if (btnSubmit.Enabled)
{
btnSubmit.Enabled = false;
string script = "$(document).ready(function() {$(\"input[id$='" + btnSubmit.ClientID + "']\").removeAttr('disabled');});";
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "EnableSubmitButton", script, true);
}