我有一个填充输入字段的方法:
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。
我做错了什么?
答案 0 :(得分:2)
在我看来,{_ 1}}和catagoryDropDown
在Page_Load中为空。
你需要绑定它们,或者以某种applicationDropDown
方法填充它们,这些方法将在Init()
之前调用(或者在调用Page_Load
之前简单地填充Page_Load
)