C# ниспадающий список выбранного элемента null, когда список строк / объектов, связанных с источником данных
Я пытаюсь привязать список строк к выпадающему. В веб-интерфейсе я могу правильно видеть список из раскрывающегося списка, но когда я выбираю значение и нажимаю на поиск, он выдает исключение нулевой ссылки, потому что кажется, что он доступен только для чтения. Вот что я попробовал:
<asp:DropDownList runat="server" ID="ddl" AppendDataBoundItems="True">
<asp:ListItem Value="">Please Select</asp:ListItem></asp:DropDownList>
Код позади:
List<string> items = helper.GetData(); //A method that simply returns a list of strings.
ddl.DataSource = items;
ddl.DataBind();
protected void searchClick(object sender, EventArgs e){
/*This is null and when I inspect this, I don't see any value matching
the string selected in dropdown.*/
var selectedOption = ddl.SelectedItem.Text;
}
Я перепробовал все возможные решения онлайн. Я даже пытался преобразовать его в словарь, как это было дано здесь. Я также попытался преобразовать его в объект, назначив ему заголовок и свойство ID, как здесь
Спасибо.
3 ответа
У вас есть список привязок в выпадающем списке, но вы не можете добавить, какое значение нужно выбрать, когда выбрано любое значение.
If(!isPostBack())
{
ddl.DataSource = items;
ddl.DataTextField = "Field name which hold items(Text to be shown in ddl)";
ddl.DataValueField = "ID of items(Value for items)";
ddl.DataBind();
}
Если у вас есть только список, и вы должны добавить его в выпадающий список, используйте блоу-код.
List<string> items=helper.GetData();
for(var i=0; i < items.Count; i++)
{
ddl.Items.Add(new ListItem(i, items[i]));
//ddl.Items.Add(new ListItem(key, source)); For reference only
}
Чтобы получить значение вы можете использовать:
ddl.SelectedItem.Value;
ddl.SelectedItem.Text;
Посмотрев на это, я заметил две вещи:
Если первые 4 строки находятся на вашей странице загрузки, убедитесь, что вы переносите их в
if (! isPostBack) {
}
Если он не обернут в! IsPostBack, то значение будет по умолчанию равным первому значению каждый раз, когда происходит обратная передача, так как ddl будет восстанавливаться каждый раз.
- Как упоминалось выше, вы не указываете DataTextField или DataValueField. Если они не указаны, вы получите типы объектов в выпадающем списке вместо значений.
Кроме того, рассмотрите возможность использования ddl.SelectedValue, а не SelectedItem.Text, поскольку это даст вам уникальный идентификатор, назначенный для DataValueField
Dictionary<string, string> openWith =
new Dictionary<string, string>();
Вы должны использовать следующий список.
ddl.DataSource = items;
ddl.DataTextField = "Text Which Show In DropDown";
ddl.DataValueField = "value -When Text Is Select From Dropdown";
ddl.DataBind();