如何从SelectListItem返回SelectList?

时间:2013-10-29 12:55:24

标签: asp.net-mvc asp.net-mvc-4

我在mvc4中使用DropdownList。我需要返回一个选择列表来绑定编辑时的下拉列表,但是我收到错误"Cannot implicitly convert type 'System.Web.Mvc.SelectList' to 'System.Collections.Generic.List<System.Web.Mvc.SelectList>"。所以请帮我转换为SelectList

代码:

    public List<SelectList> SelectDoctoronEdit(int id)
    {

        Gema_Doctor[] doctorList;
        doctorList = gema_Doctor.GetDoctor().ToArray();
        List<Gema_Doctor> listDoctor = new List<Gema_Doctor>(doctorList);
        List<SelectListItem> dropItems = new List<SelectListItem>();
        RDM_Patient patientsSelect = rdm_Patient.GetPatient().First(c => c.PatientID == id);
        dropItems.Add(new SelectListItem { Text = "--Select--", Value = "" });
        foreach (Gema_Doctor doctorValues in listDoctor)
        {
            RDM_Patient patients = rdm_Patient.GetPatient().First(c => c.PatientID == id);
            if (patients.DoctorID == doctorValues.Dr_Id)
            {
                dropItems.Add(new SelectListItem { Text = doctorValues.Dr_Name, Value = doctorValues.Dr_Id.ToString(), Selected = true });
            }
            else
            {
                dropItems.Add(new SelectListItem { Text = doctorValues.Dr_Name, Value = doctorValues.Dr_Id.ToString(), Selected = false });

            }


        }
        //return dropItems; 

        SelectList s1 = new SelectList(dropItems, "Value", "Text", patientsSelect.DoctorID);
        return s1;


    }   



View Page:

    <tr>
           <td>
             @Html.LabelFor(M => Model.Patient.City)
             @Html.TextBoxFor(M => Model.Patient.City)

           </td>
           <td>
             @Html.LabelFor(M => Model.Patient.Add1)
             @Html.TextBoxFor(M => Model.Patient.Add1)


           </td>
           <td>
             @Html.LabelFor(M => Model.Patient.Add2)
             @Html.TextBoxFor(M => Model.Patient.Add2)

           </td>
   </tr> 
   <tr>
          <td>

           </td>
           <td>
            @Html.Label("Doctor")

            @Html.DropDownListFor(m => Model.Patient.DoctorID.ToString(), (SelectList)ViewBag.doctorType)


           </td>
           <td>

           </td>
   </tr>   

2 个答案:

答案 0 :(得分:2)

更改方法的返回类型:

public List<SelectList> SelectDoctoronEdit(int id)

public SelectList SelectDoctoronEdit(int id)

您正在尝试返回s1 typeOf SelectList变量,并且您的方法签名要求您返回SelectList项列表。

PS。你不能在lambda表达式中使用函数

@Html.DropDownListFor(m => Model.Patient.DoctorID.ToString(), (SelectList)ViewBag.doctorType)

错误是因为 Model.Patient.DoctorID.ToString()

试试这个:

@Html.DropDownListFor(m => Model.Patient.DoctorID, (SelectList)ViewBag.doctorType)

您正在为模型中的属性创建 DropDownList ,您不需要在那里使用 ToString()方法。

答案 1 :(得分:1)

您的方法应该返回List<SelectListItem>而不是List<SelectList>

public List<SelectListItem> SelectDoctoronEdit(int id)
{
    Gema_Doctor[] doctorList;
    doctorList = gema_Doctor.GetDoctor().ToArray();
    List<Gema_Doctor> listDoctor = new List<Gema_Doctor>(doctorList);
    List<SelectListItem> dropItems = new List<SelectListItem>();
    RDM_Patient patientsSelect = rdm_Patient.GetPatient().First(c => c.PatientID == id);
    dropItems.Add(new SelectListItem { Text = "--Select--", Value = "" });
    foreach (Gema_Doctor doctorValues in listDoctor)
    {
        RDM_Patient patients = rdm_Patient.GetPatient().First(c => c.PatientID == id);
        if (patients.DoctorID == doctorValues.Dr_Id)
        {
            dropItems.Add(new SelectListItem { Text = doctorValues.Dr_Name, Value = doctorValues.Dr_Id.ToString(), Selected = true });
        }
        else
        {
            dropItems.Add(new SelectListItem { Text = doctorValues.Dr_Name, Value = doctorValues.Dr_Id.ToString(), Selected = false });

        }
    }

    return new SelectList(dropItems, "Value", "Text", patientsSelect.DoctorID);
} 

或者如果您直接选择SelectList

public SelectList SelectDoctoronEdit(int id)
{
    Gema_Doctor[] doctorList;
    doctorList = gema_Doctor.GetDoctor().ToArray();
    List<Gema_Doctor> listDoctor = new List<Gema_Doctor>(doctorList);
    List<SelectListItem> dropItems = new List<SelectListItem>();
    RDM_Patient patientsSelect = rdm_Patient.GetPatient().First(c => c.PatientID == id);
    dropItems.Add(new SelectListItem { Text = "--Select--", Value = "" });
    foreach (Gema_Doctor doctorValues in listDoctor)
    {
        RDM_Patient patients = rdm_Patient.GetPatient().First(c => c.PatientID == id);
        if (patients.DoctorID == doctorValues.Dr_Id)
        {
            dropItems.Add(new SelectListItem { Text = doctorValues.Dr_Name, Value = doctorValues.Dr_Id.ToString(), Selected = true });
        }
        else
        {
            dropItems.Add(new SelectListItem { Text = doctorValues.Dr_Name, Value = doctorValues.Dr_Id.ToString(), Selected = false });

        }
    }

    return dropItems;
}