字段未在页面加载时填充,但正在填充操作事件

时间:2013-07-16 13:19:58

标签: c# asp.net drop-down-menu

我有一个填充输入字段的方法:

 private void populateMostRecentStory(string selectedUser)
    {
        recentPK = getRecentStoryPK(selectedUser);
        if (Int32.Parse(recentPK) != -1)
        {
            string[] returnedValues = retrieveLastStory(recentPK);
            if (returnedValues[0] != null)
            {
                int i = 0;
                int x = 0;
                foreach (var item in catagoryDropDown.Items)
                {
                    if (item.ToString().Equals(returnedValues[0].ToString()))
                    {
                        catagoryDropDown.SelectedIndex = i;
                        break;
                    }
                    i++;
                }
                foreach (var item in applicationDropDown.Items)
                {
                    if (item.ToString().Equals(returnedValues[2].ToString()))
                    {
                        applicationDropDown.SelectedIndex = x;
                        break;
                    }
                    x++;
                }
                dateInput.SelectedDate = DateTime.Parse(returnedValues[1]);
                incidentInput.Text = returnedValues[3];
                hoursInput.Text = returnedValues[5];
                descriptionInput.Text = returnedValues[6];
            }
        }
        else
        {
            clearStoryData();
        }
        dataBindFields();
    }

    private void dataBindFields()
    {
        catagoryDropDown.DataBind();
        dateInput.DataBind();
        applicationDropDown.DataBind();
        incidentInput.DataBind();
        hoursInput.DataBind();
        descriptionInput.DataBind();
    }

当更改下拉菜单的操作事件发生时,它非常有用:

//user drop down
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{

    populateMostRecentStory(userNameDropDown.SelectedItem.Value);
}

但是在页面加载时,除了catagoryDropDown和applicationDropDown之外,所有字段都正确填充:

protected void Page_Load(object sender, EventArgs e)
{
    populateMostRecentStory(getPKofUserLoggedIn());
    //Assign SQL parameter to user drop down list so that the list shows the logged in user first   followed by other users in alphabetical order
    SqlDataSource1.SelectParameters["userLoggedIn"].DefaultValue = User.Identity.Name;
}

我必须使用不同的方法来获取主键,因为userNameDropDown.SelectedItem.Value会在页面加载时导致NullExceptionError。我事先尝试过DataBind,但它不起作用。

无论如何,如果我在页面上打印出getPKofUserLoggedIn()的值,则将其打印出来:45当我打印出userNameDropDown.SelectedItem.Value的值时,选择它并且动作事件触发时它也是45。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

在我看来,{_ 1}}和catagoryDropDown在Page_Load中为空。 你需要绑定它们,或者以某种applicationDropDown方法填充它们,这些方法将在Init()之前调用(或者在调用Page_Load之前简单地填充Page_Load