为什么我的DropDownList在Postback上为空?

时间:2010-12-02 14:32:15

标签: asp.net drop-down-menu

我已经看过一些类似问题的答案,但我似乎仍然无法弄清楚这一点。我想我误解了ASP.NET的工作方式。

在标准的ASP.Net 4.0“创建新帐户”表单中,我添加了一个DropDownList,其中包含要为新帐户选择的角色。在aspx页面中,控件如下所示:

<asp:DropDownList ID="RoleList" Width="100px" runat="server"></asp:DropDownList>

然后我在Page_Load事件中填充List:

protected void Page_Load(object sender, EventArgs e)
    {
        RegisterUser.ContinueDestinationPageUrl = Request.QueryString["ReturnUrl"];

        if (Page.IsPostBack)
        {
            return;
        }

        //Set the Role List Selections
        DropDownList roleList = (DropDownList)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("RoleList");

        //set the role list
        String[] roles = Roles.GetAllRoles();
        foreach (String role in roles)
        {
            roleList.Items.Add(new ListItem(role, role));
        }
    }

我可以从生成的html中看到/选择一个角色。单击用于创建用户的“提交”按钮时会出现问题:

protected void RegisterUser_CreatedUser(object sender, EventArgs e)
    {
        FormsAuthentication.SetAuthCookie(RegisterUser.UserName, false /* createPersistentCookie */);

        string continueUrl = RegisterUser.ContinueDestinationPageUrl;
        if (String.IsNullOrEmpty(continueUrl))
        {
            continueUrl = "~/";
        }

        //set user role
        DropDownList roleList = (DropDownList)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("RoleList");
        Roles.AddUserToRole(RegisterUser.UserName, roleList.SelectedValue);

        Response.Redirect(continueUrl);
    }

此处,roleList对象包含零项,并且没有选定的值。不知何故,我在选择项目和提交之间丢失了填充项目。知道我做错了吗?

4 个答案:

答案 0 :(得分:9)

将您的下拉列表加载到OnInit函数中 - 然后在调用RegisterUser_CreatedUser时应该正确加载它:

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);

    //Set the Role List Selections
    DropDownList roleList = (DropDownList)RegisterUser.CreateUserStep.ContentTemplateContainer.FindControl("RoleList");

    //set the role list
    String[] roles = Roles.GetAllRoles();
    foreach (String role in roles)
    {
        roleList.Items.Add(new ListItem(role, role));
    }
}

答案 1 :(得分:1)

我遇到类似的问题,即单选按钮选择的更改会自动回发页面,并且页面返回后,下拉列表项会消失。

解决方案

检查IIS - &gt;您的网站 - &gt;页数和控制 - &gt;启用Viewstate&amp;启用S​​essionstate应设置为true。

希望这有帮助。

答案 2 :(得分:0)

下面的代码会绕过页面加载上的正确数据绑定。

if (Page.IsPostBack) 
{ 
    return; 
}

每次都需要绑定此控件,以便在调用单击事件时存在值。对于不再存在的选定项目,您可能还会遇到事件错误。

答案 3 :(得分:0)

您是否尝试在以下条件下接受绑定?

if (!Page.IsPostBack)  
{  
    //Binding goes here
}