0

我正在 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>   
4

2 回答 2

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()方法。

于 2013-10-29T13:08:13.523 回答
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;
}   
于 2013-10-29T12:57:50.247 回答