ASP.NET单选按钮列表| SelectedValue即将出现NULL

时间:2011-02-23 02:40:56

标签: c# server-side radiobuttonlist

我发布了一个类似的RBL问题,但我有一个新问题,所以我想我会发一个新帖子。

这是我的代码:

的Page_Load

protected void Page_Load(object sender, EventArgs e)
{
    //Output Success/Error Message
    if (Session["formProcessed"] != null)
    {
        Label lblMessage = (Label)Master.FindControl("lblMessage");
        new Global().DisplayUserMessage("success", Session["formProcessed"].ToString(), lblMessage);
    }
    Session.Remove("formProcessed");

    if (Page.IsPostBack == false)
    {
        rblContentTypesGetAll.DataBind();
    }
}

rblContentTypesGetAll_Load

 protected void rblContentTypesGetAll_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DataTable dt = new DataTable();
        using (SqlConnection con = new SqlConnection(Global.conString))
        using (SqlCommand cmd = new SqlCommand("contentTypeGetAll", con))
        using (SqlDataAdapter da = new SqlDataAdapter(cmd))
        {
            da.Fill(dt);
        }
        //Clear Items before reloading
        rblContentTypesGetAll.Items.Clear();

        //Populate Radio button list
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            rblContentTypesGetAll.Items.Add(new ListItem(dt.Rows[i]["contentType"].ToString() + " - " + dt.Rows[i]["description"].ToString(),
                dt.Rows[i]["ID"].ToString()));
        }

        //Set Default Selected Item by Value
        rblContentTypesGetAll.SelectedIndex = rblContentTypesGetAll.Items.IndexOf(rblContentTypesGetAll.Items.FindByValue(((siteParams)Session["myParams"]).DefaultContentType.ToLower()));
    }

}

HTML / ASP.NET前端

 <asp:RadioButtonList id="rblContentTypesGetAll" OnLoad="rblContentTypesGetAll_Load"  runat="server">
        </asp:RadioButtonList>

一旦我提交表单,selectedValue就会变成空白。我在做什么,这显然是不正确的?

4 个答案:

答案 0 :(得分:4)

尽管你们所有人都很有帮助,但问题还是要深刻得多。我禁用了viewState。

答案 1 :(得分:1)

Page_Load中的所有代码都需要在内部:

if(Page.IsPostBack  == false)

您在提交页面时重新填写列表,导致列表重新填充,从而丢失之前的项目,包括选择了哪一项。

  

http://gurustop.net

答案 2 :(得分:0)

尝试在page_load中填写所需的绑定,不要忘记使用(!IsPostBack)

答案 3 :(得分:0)

我认为唯一可能发生的事情是你在这里设置原始选择的索引:

rblContentTypesGetAll.SelectedIndex = rblContentTypesGetAll.Items.IndexOf(rblContentTypesGetAll.Items.FindByValue(((siteParams)Session["myParams"]).DefaultContentType.ToLower()));

可能找不到该值,然后将其设置为“-1”。然后,如果您没有在页面上选择单选按钮,则不会选择任何值。

我试过这个看起来很好:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //Pretending to call your stored proc..
            DataTable dt = new DataTable();
            dt.Columns.Add("contentType");
            dt.Columns.Add("description");
            dt.Columns.Add("ID");
            dt.AcceptChanges();
            for (int i = 0; i < 6; i++)
            {
                DataRow dr = dt.NewRow();
                dr["contentType"] = "cnt" + i.ToString();
                dr["description"] = "desc" + i.ToString();
                dr["ID"] = i.ToString();
                dt.Rows.Add(dr);
            }


            //Populate Radio button list
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                rblContentTypesGetAll.Items.Add(new ListItem(dt.Rows[i]["contentType"].ToString() + " - " + dt.Rows[i]["description"].ToString(),
                    dt.Rows[i]["ID"].ToString()));
            }

            //Set Default Selected Item by Value
            rblContentTypesGetAll.SelectedIndex = 0; //this could be -1 also
        }

        lblMessage.Text = "rblContentTypesGetAll.SelectedValue :" + rblContentTypesGetAll.SelectedValue;

    }