1

環境: ASP NET 2.0 - 運用サーバーには Ajax コントロール ツールキットがないため、ここで使用する実際のコントロール ツールキットはありません。

3 RadioButtons リスト: リスト 1 がロードされ、ポストバック後に、リスト 1 の項目を使用して Lab 値が選択されます。ラボの値が選択されると、3 番目のラジオボタン リストが表示されます。いくつかのテキスト ボックスがありますが、例には示されていません。テキストボックスは変更時にポストバックします。両方のテキスト ボックスが空でない場合、セッションのレコードが作成されます。

3 番目の radiobuttonlist がデフォルトから変更されると、変更の 3 つのレベルの理由 (データベース内の子/親レコード) を表す一連の 3 つの非表示のユーザー コントロールが表示されます。

私が抱えている問題は、ラジオボタンリストで別の項目を選択すると、ユーザーコントロールが起動した後にラジオボタン 3 OnSelectedIndex が起動することです。私のユーザー コントロールは、データベースにアクセスしてラボに関連付けられた正しいレコード セットを取得するために、3 番目のリストの値を必要とします。

問題は、web コントロールが読み込まれるまで最後の radiobuttonlist が処理されず、ユーザー コントロールをマウントするコードが実行されないことです。

基本的な 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;

        }

    }

ユーザーコードの例を次に示します。

3 番目のボタン リストのデータがここで利用できないため、このコードは起動しません。

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
                    }

            } 
        }
    }

これが明確であることを願っています。私は攻撃しました

--- * --- 最初の投稿以降: シンプルな javascript/OnDataBound 関数を追加しました Primary(object) { alert("Value Clicked :" + object); }


protected void rdoPrimary_DataBound (オブジェクト送信者、EventArgs e) { RadioButtonList rdlPrimary = (RadioButtonList) 送信者; foreach (ListItem li in rdlPrimary.Items) { li.Attributes.Add("onclick", "javascript:Primary('" + li.Value + "')"); } }

4

1 に答える 1

0

保持したい値を SaveViewState および LoadViewState メソッドで保存および取得し、それが機能するかどうかを確認しますか? また、ロジックを処理するための初期および後期のライフサイクル イベント (Init および OnPreRender) にも注意してください。これは過去に私のために働いていました。

于 2011-01-27T23:50:42.710 に答える