2011-01-27 63 views
1

環境:ASP NET 2.0 - 生產服務器沒有Ajax控件工具包,所以沒有真正的控件工具包在這裏使用。RadioButtonList回傳問題

3 RadioButton列表: 列出一個負載,回發後,列表1中的項目用於選擇Lab值。 一旦選擇了實驗室值,將填充第三個單選按鈕列表。有一些文本框,但它們沒有在示例中顯示。文本框會在更改後自行回發。如果兩個文本框都不爲空,則爲該會話創建一條記錄。

現在,如果第三個radiobuttonlist從默認更改了一系列3個隱藏的用戶控件出現,代表3級變化的原因(數據庫中的子/父記錄)。

我遇到的問題是當我在用戶控件觸發後在radiobuttonlist上選擇另一個項目時,單選按鈕3 OnSelectedIndex正在觸發。我的用戶控件需要第三個列表的值才能訪問數據庫並獲取與實驗室相關的正確記錄集。

問題是因爲最後一個radiobuttonlist沒有處理,直到Web控件加載後,用戶控件的掛載代碼纔不會發生。

這是基本的HTML代碼:

<asp:RadioButtonList ID="rdoLab" runat="server" OnSelectedIndexChanged="rdoLab_OnSelectedIndexChange"> 
    </asp:RadioButtonList> 
    <asp:TextBox ID="textbox1" runat="server" OnTextChanged="TextBoxProcess" /> 
    <asp:TextBox ID="textbox2" runat="server" OnTextChanged="TextBoxProcess" /> 
    <asp:RadioButtonList ID="rdoPrimary" RepeatColumns="3" OnSelectedIndexChanged="rdoPrimary_OnSelectedIndexChanged" runat="server" ToolTip="Select Normal, Hypo or Hyper - Normal is default value." AutoPostBack="True" > 
     <asp:ListItem Value="3" Text="Normal" Selected="true"/> 
     <asp:ListItem Value="1" Text="Hypo" />         
     <asp:ListItem Value="2" Text="Hyper" /> 
    </asp:RadioButtonList> 
    <asp:Panel ID="UpdLab" runat="server" Visible="true" EnableViewState="true"> 
      <asp:Table ID="tblAdmin" runat="server"> 
       <asp:TableRow> 
         <asp:TableCell runat="server" id="tblCell1" Visible="false" CssClass="tdCell" VerticalAlign="top"> 
          <uc1:Lab ID="Lab1" runat="server" EnableViewState="true" EnableTheming="true" />            
         </asp:TableCell> 
         <asp:TableCell runat="server" ID="tblCell2" Visible="false" CssClass="tdCell" VerticalAlign="top"> 
          <uc1:Lab ID="Lab2" runat="server" EnableViewState="true" EnableTheming="true" /> 
         </asp:TableCell> 
         <asp:TableCell runat="server" ID="tblCell3" Visible="false" CssClass="tdCell" VerticalAlign="top"> 
          <uc1:Lab ID="Lab3" runat="server" EnableViewState="true" EnableTheming="true" /> 
         </asp:TableCell> 
       </asp:TableRow> 
      </asp:Table> 

    </asp:Panel>        

這裏是背後的頁面:

protected override void OnPreLoad(EventArgs e) 
    { 
     base.OnPreLoad(e); 
     GetSessionVars(); 

     if (CommonUI.strTest((string)Session["rdoLabs"]) && CommonUI.strTest((string)Session["rdoPrimary"]) && Convert.ToString(hrdoLabs.Value) == (string)Session["rdoLabs"]) 
     { 
      divLabLvl.Visible = true; 
      // Get cboListItems from the web user controls... 
      Session["ArrLstItems"] = ""; 
      ArrayList ArrLstItems = new ArrayList(); 
      ArrayList GetWuc = GetWUCS(); 

      for (int i = 0; i < GetWuc.Count; i++) 
      { 
       Lab wuc = (Lab)GetWuc[i]; 
       CheckBoxList cboItemList = (CheckBoxList)wuc.FindControl("cboItems"); 
       string cboItems = GetCboItemList(cboItemList); 
       HiddenField hcboItems = (HiddenField)wuc.FindControl("hcboItems"); 
      } 
      Session["ArrLstItems"] = (ArrayList)ArrLstItems; 
     } 

    } 
    protected void Page_Load(object sender, EventArgs e) 
    { 

     if (!IsPostBack) 
     { 
      DbDataReader ddrGrp = rdoGroups(); 
      if (ddrGrp.HasRows) 
      { 
       rdoGroup.DataSource = ddrGrp; 
       rdoGroup.DataBind(); 
      } 
      ddrGrp.Close(); 
     } 
     else 
     { 
      DbDataReader ddrLab = rdoUserLabs(); 
      if (ddrLab.HasRows) 
      { 
       rdoLabs.DataSource = ddrLab; 
       rdoLabs.DataBind(); 
       if (CommonUI.strTest((string)Session["rdoLabs"])) 
       { 
        if (Convert.ToInt32(Session["rdoLabs"]) > 0) 
        { 
         rdoLabs.SelectedValue = (string)Session["rdoLabs"]; 
         SetLabCss(); 
        } 
       } 
      } 
      ddrLab.Close(); 
     } 

    } 

    protected void rdoGroup_OnSelectedIndexChanged(object sender, EventArgs e) 
    { 
     //...do some stuff 
    } 

    protected void rdoLabs_OnSelectedIndexChanged(object sender, EventArgs e) 
    { 
     //... reload 
    } 

    protected DbDataReader rdoGroups() 
    { 

     int group_type_id = GroupTypeId(); 
     Group grp = new Group(); 
     return grp.GetGroups(group_type_id); 

    } 

    protected DbDataReader rdoUserLabs() 
    { 
     RadioButtonList rdoGrp = (RadioButtonList)CommonUI.FindCtrlRecursive(this.Master, "rdoGroup"); 
     int GroupId = Convert.ToInt32(rdoGrp.SelectedValue); 
     LabAbnormalReasons lar = new LabAbnormalReasons(); 
     return lar.GetLabsList(GroupId); 
    } 

    protected void rdoPrimary_OnSelectedIndexChanged(object sender, EventArgs e) 
    { 
     Session["Save"] = ((RadioButtonList)sender).ID; 
     RadioButtonList rdoGroups = (RadioButtonList)CommonUI.FindCtrlRecursive(this.Master, "rdoGroup"); 
     RadioButtonList rdoLabs = (RadioButtonList)CommonUI.FindCtrlRecursive(this.Master, "rdoLabs"); 
     int UserId = Convert.ToInt32(Session["UserId"]); 
     int DocId = Convert.ToInt32(Session["DocId"]); 
     SubmitLab_Data(arrLstItems, arrOthers); 
    } 

    protected void GetSessionVars() 
    { 

     RadioButtonList rdoGroup = (RadioButtonList)CommonUI.FindCtrlRecursive(this.Master, "rdoGroup"); 
     RadioButtonList rdoPrimary = (RadioButtonList)CommonUI.FindCtrlRecursive(this.Master, "rdoPrimary"); 
     RadioButtonList rdoLabs = (RadioButtonList)CommonUI.FindCtrlRecursive(this.Master, "rdoLabs"); 

     if (rdoGroup.SelectedIndex != -1) 
     { 
      Session["rdoGroup"] = (string)rdoGroup.SelectedValue; 
     } 
     if (rdoLabs.SelectedIndex != -1) 
     { 
      Session["rdoLabs"] = (string)rdoLabs.SelectedValue; 
     } 
     if (rdoPrimary.SelectedIndex != -1) 
     { 
      Session["rdoPrimary"] = (string)rdoPrimary.SelectedValue; 

     } 

    } 

這裏是例如用戶代碼:

此代碼永遠不會觸發因爲第三個按鈕列表數據不可用:

protected void Page_Load(object sender, EventArgs e) 
    { 
     /////* 
     //// * lab & Primary have been selected... 
     //// */ 
     int lvl = SetLvlId(); 
     int par_id = GetParentLvl(); 
     Lab wuc = GetWuc(lvl); 
     if (wuc != null) 
     { 
      if (CommonUI.strTest(Convert.ToString(Session["rdoLabs"])) && CommonUI.strTest(Convert.ToString(Session["rdoPrimary"]))) 
      { 
        // data in data base for this user, lab, doc identifier... 
        if (Convert.ToInt32(Session["rdoPrimary"]) > 0 
        { 
         // have user hdr data - see if item data is mapped... 
         // do some stuff here 
        } 

      } 
     } 
    } 

我希望這很清楚。我已經ATT

--- * ---由於原發帖: 添加簡單的JavaScript/OnDataBound 功能主(對象) { 警報( 「價值點擊的:」 +對象); }


保護無效rdoPrimary_DataBound(對象發件人,EventArgs的) { RadioButtonList的rdlPrimary =(單選按鈕列表)發送者; foreach(ListItem li in rdlPrimary.Items) li.Attributes.Add(「onclick」,「javascript:Primary('」+ li.Value +「')」); } }

+0

您是否嘗試在PreInit或Page_Init事件中執行處理以查看行爲是相同還是不同? – TheGeekYouNeed 2011-01-27 23:29:46

回答

0

存儲和檢索您想保留在SaveViewState和LoadViewState方法中的值,看看它是否適合您?也可以查看處理邏輯的早期和後期生命週期事件 - Init和OnPreRender。這在過去對我有用。

+0

我試圖在LoadViewState上添加覆蓋。我在調試時甚至沒有放入該部分。我試圖添加代碼來獲得一個特定的用戶控件和選定的值。然後我禁用了程序中的所有斷點。然後,我在該組代碼行上添加了一個斷點。當我遍歷代碼時,它永遠不會起作用? – eric 2011-01-28 16:09:50