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。ラムダ式内で関数を使用することはできません

@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 に答える