Javascript 部分回发后,组合框启用状态重置 出身背景

Javascript 部分回发后,组合框启用状态重置 出身背景,javascript,asp.net,callback,updatepanel,viewstate,Javascript,Asp.net,Callback,Updatepanel,Viewstate,我有一个搜索功能,允许最终用户在数据库中搜索项目。此搜索功能有一个文本框、两个组合框和一个按钮 当选择一个组合框项目时,另一个项目的值将更改,并将其设置为禁用。这是由Javascript和works完成的 所有控件都在updatepanel中 问题 updatepanel进行的回调完成后,将重置已禁用的组合框,并将其呈现为已启用 我猜 Javascript所做的更改不会保存到viewstate,并在初始请求中发回 有人能解释一下这个问题吗 密码 ASP 这是WebForms中的常见问题。是的,你

我有一个搜索功能,允许最终用户在数据库中搜索项目。此搜索功能有一个文本框、两个组合框和一个按钮

当选择一个组合框项目时,另一个项目的值将更改,并将其设置为禁用。这是由Javascript和works完成的

所有控件都在updatepanel中

问题 updatepanel进行的回调完成后,将重置已禁用的组合框,并将其呈现为已启用

我猜 Javascript所做的更改不会保存到viewstate,并在初始请求中发回

有人能解释一下这个问题吗

密码 ASP


这是WebForms中的常见问题。是的,你的猜测是对的。启用状态未保存在ViewState中

最好的方法是使用pageLoad功能:

<script> 
   ///<summary>
   ///  This will fire on initial page load, 
   ///  and all subsequent partial page updates made 
   ///  by any update panel on the page
   ///</summary>
   function pageLoad(){ alert('page loaded!') }  
</script>

是的,我也有这个想法,通过在JS window.onload事件中再次禁用它。然而,由于更新面板的原因,它似乎没有在回调时启动。这就是你的意思吗?.window.onload函数与pageLoad函数不同。如果在JavaScript中定义一个pageLoad函数,它也会在每个部分回发事件中触发。好的,我现在正在研究这个问题。谢谢。请注意,该函数必须命名为“pageLoad”,每页只允许使用一个pageLoad函数。默认情况下,ViewState只保存控件的.text和.value字段,而不保存“enabled”等属性。此外,在客户端设置样式值不会更新ViewState。如果要将样式存储在ViewState中,则必须在服务器端设置样式。
 function ChangeSearchCriteriaItem(s, e) {
            debugger;

            var cmbLocationCriteria = ASPxClientControl.GetControlCollection().GetByName("CbSearchLocationCriteria")
            var selecteditem = cmbLocationCriteria.GetSelectedItem();
            var cmbSearchCriteria = ASPxClientControl.GetControlCollection().GetByName("CbSearchCriteria");

            if (selecteditem.text == "Comms Log") {

                cmbSearchCriteria.SetValue("JobId");
                cmbSearchCriteria.SetEnabled(false);
            }
            else {
                cmbSearchCriteria.SetEnabled(true);
            }
        }
<script> 
   ///<summary>
   ///  This will fire on initial page load, 
   ///  and all subsequent partial page updates made 
   ///  by any update panel on the page
   ///</summary>
   function pageLoad(){ alert('page loaded!') }  
</script>
ClientScriptManager.RegisterStartupScript(
       typeof(page1), 
       "CssFix", 
       "javascriptFunctionName()", 
        true);