我在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>
答案 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;
}