Получить выбранное значение выпадающего списка внутри элемента управления repeater

#c# #asp.net #drop-down-menu

#c# #asp.net #выпадающее меню

Вопрос:

У меня есть выпадающий список внутри элемента управления repeater, значение которого я пытаюсь получить, и я получаю «Ссылка на объект, не установленная для экземпляра объекта». Я не уверен, что еще попробовать. Спасибо

ASPX-КОД:

    <asp:Repeater ID="GeneralRepeater" runat="server" 
             OnItemDataBound="GeneralRepeater_OnItemDataBound" 
                onitemcommand="GeneralRepeater_ItemCommand">
            <HeaderTemplate></HeaderTemplate>
            <ItemTemplate>
            <tr>
             <td class="style2">
             </td>
              <td class="style2">
                 <asp:DropDownList ID="GeneralDDL"  AppendDataBoundItems="true"  DataTextField="DiagnosisCode" 
                  DataValueField="DiagnosisCode" runat="server" AutoPostBack="True" />
               </td>

            </tr>
            </ItemTemplate>
            <FooterTemplate></FooterTemplate>
            </asp:Repeater>
        </asp:Panel>
  

КОД, ЛЕЖАЩИЙ В ОСНОВЕ:

 protected void GeneralRepeater_OnItemDataBound(object sender,
                                               RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item ||
            e.Item.ItemType == ListItemType.AlternatingItem)
        {
            DropDownList myDDL = (DropDownList)e.Item.FindControl("GeneralDDL");
            Diagnosis oDiagnosis = new Diagnosis();
            DataView dv = new DataView(oDiagnosis.GetDiagnosis());
            myDDL.DataSource = dv;
            myDDL.DataTextField = "DiagnosisCode";
            myDDL.DataValueField = "DiagnosisCode";
            myDDL.DataBind();

        }
    }

protected void cmdSave_Click(object sender, EventArgs e)
{
    string ProductSelected;
    string FeatureSelected;
    string SectionSelected;


    foreach(RepeaterItem dataItem in GeneralRepeater.Items)
    {
         ProductSelected = ((DropDownList)GeneralRepeater.FindControl("GeneralDDL")).SelectedItem.Text; //error Object reference not set to an instance of an object.
    }                   
}
  

У меня возникла проблема с сохранением выбранного значения..

Ответ №1:

Что я нахожу в коде, так это то, что вы перебираете элементы generalrepeater. Вы получаете доступ к элементу repeater как DataItem. Я опробовал этот код здесь, и в идеале ваш код должен говорить

 foreach(RepeaterItem dataItem in GeneralRepeater.Items)        
{               
  ProductSelected = ((DropDownList)dataItem.FindControl("GeneralDDL")).SelectedItem.Text; //No error
}
  

вместо

 foreach(RepeaterItem dataItem in GeneralRepeater.Items) 
{
   ProductSelected = ((DropDownList)GeneralRepeater.FindControl("GeneralDDL")).SelectedItem.Text; //error Object reference not set to an instance of an object.
} 
  

Комментарии:

1. Я не пробовал это, но я думаю, что EcoGreen подходит правильно. Хотя «DataItem» может быть немного неправильным.