none
无法获取动态创建的RadiobuttonList的值 RRS feed

  • 问题

  •         protected void Page_Load(object sender, EventArgs e)
            {          
               if (!IsPostBack)
                {
                    int i = 1;
                    //DataBind();
    
    
                    List<Quse> list = new List<Quse>();
                    bd = new DB_con();
                    list = bd.GetQue();
                    Fac dfac = new Fac();
                    List<Danxuan> dList;
                    //外边定义的一个用来创建题目和RadiobuttonList的类,
                    //后边贴代码
                    dList = Danxuan.creatRadionButtonList(1, list);
                    Session["PList"] = dList;
    
                    foreach (Danxuan d in dList)
                    {
                        Panel2.Controls.Add(d.littxt);
                        Panel2.Controls.Add(d.cbk);
                        Panel2.Controls.Add(d.littia);
                        // 将创建好的题目和RadioButtonList放入Panel中
                    }
                    //用Session存储
                    Session["DList"] = dList;
    }
    
    
    //创建题目和RadioButtonList的类:
    public class Danxuan:System.Web.UI.Page
        {
            public Literal littxt;
            public Literal littia;
            public RadioButtonList cbk;
            public int Num { get; set; }
            public  List<Quse> qList = new List<Quse>();
            //用来存储被创建的RadioButtonList
            public  List<RadioButtonList> cbks = new List<RadioButtonList>() ;//{ get; set; }
    
            public Danxuan() { }
            public Danxuan(int i, Quse q)
            {
    
                 littxt = new Literal();
                 littia = new Literal();
                 cbk = new RadioButtonList();
                 cbk.ID = "cbk" + i.ToString();
                 littxt.Text = i.ToString() + "、" + "<br><Blockquote> ";
                 littia.Text = "</Blockquote>";
    
                 cbk.Items.Add("A" + q.Ans1);
                 cbk.Items.Add("B" + q.Ans2);
                 cbk.Items.Add("C" + q.Ans3);
                 cbk.Items.Add("D" + q.Ans4);
                 cbk.Font.Size = 11;
                 cbks.Add(cbk);
     
            }
    
                    public static List<Danxuan> creatRadionButtonList(int index, List<Quse> list)
            {
         
                List<Danxuan> rlist = new List<Danxuan>();
                int i = 1;
                foreach (Quse q in list)
                {
                    if (i <= index)
                    {
                        Danxuan d = new Danxuan(i,q);
                        d.Num = index;
                        rlist.Add(d);
                        d.qList.Add(q);
                    }
                    
                }
    
                return rlist;
    
            }
        }
    
    //页面提交按钮事件
            protected void Button1_Click(object sender, EventArgs e)
            {
    
    
                List<Danxuan> dList = (List<Danxuan>)Session["DList"];
                int i = 1;
                foreach (Danxuan d in dList) {
                    if (d != null) {
                        List<RadioButtonList> rbls = d.cbks;
                        foreach (RadioButtonList rbl in rbls) {
                            if (rbl != null) {
                               /*出问题的地方,未将对象引用设置到对象的实例。(rbl)我仔细看了下,rbl是有的,但是里边没有被选中的值,也就是说页面中选中了之后这里并没有被赋值。*/
    
                                ans.Anss = rbl.SelectedValue.ToString();
                                ans.AndId = "A0" + i.ToString();
                                ans.StuId = st.Id;
                                
                            }
                        }
                         List<Quse> qList = d.qList;
                         foreach (Quse q in qList) {
                             if (q != null) {
                                 ans.QueId = q.QueId;
                             }
                         }
                    }
                    bd.AddAns(ans);
                }
    }

    我的思路:被创建的RadioButtonList对象被放到页面中,并且存储在一个List中,那么,页面中的RadioButtonList和List中的RadioButtonList是同一个对象,我在页面修改了RadioButtonList对象的值,也会修改掉List中RadioButtonList的值, 可是点击按钮之后页面回发发现值并没有被改变。希望大家能帮我看看思路哪里有问题,并且能告诉我为什么,还有就是能够指点一下如何获取动态创建的RadioButtonList的选项值。

    谢谢

    • 已移动 Barry Wang 2014年7月17日 8:40 Asp.NET
    2014年7月16日 15:29

全部回复

  • 你好,

    因为你的RadioButtonlist是动态创建的控件,所以,你必须在每次回传时,你都需要在PageLoad中重新创建你的RadioButtonList.

    我创建了简单的实例:

    <body>
        <form id="form1" runat="server">
        <div>
        <asp:PlaceHolder runat="server" ID="PlaceHolder1"/>
    <asp:Button runat="server" ID="Button1" OnClick="Button1_Click" Text="Submit" />
    <asp:Label runat="server" ID="Label1"/>
    
        </div>
        </form>
    </body>


    protected void Page_Load(object sender, EventArgs e) {

    //当你将动态创建的代码放在postback里面,就会出现和你一样的空异常 // if (!IsPostBack) { //LoadControls(); //} LoadControls() } protected void Button1_Click(object sender, EventArgs e) { var radioButtonList = PlaceHolder1.FindControl("1") as RadioButtonList; Label1.Text = radioButtonList.SelectedValue; } private void LoadControls() { var tmpRBL = new RadioButtonList(); tmpRBL.ID = "1"; for (int i = 1; i <= 5; i++) { var tmpItem = new ListItem(i.ToString(), i.ToString()); tmpRBL.Items.Add(tmpItem); } PlaceHolder1.Controls.Add(tmpRBL); }

    所以我建议你,将新建的动态控件移除if(!ispostback){}

    2014年7月17日 9:04