【发布时间】:2017-09-18 18:52:07
【问题描述】:
我有一张表格,其中列出了特定客户的活动注册列表。我在每一行都有下拉菜单,允许更改该行中给定事件的客户注册状态。但是,它们的当前状态并未在列表中设置;在每个列表中选择第一项。
视图模型:
public class EditRegistrationViewModel
{
public int SiteMemberId { get; set; }
public string Name { get; set; }
public List<EditParticipantViewModel> Participants { get; set; }
}
public class EditParticipantViewModel
{
public int ParticipantId { get; set; }
[Display(Name = "Event ID")]
public int EventId { get; set; }
[Display(Name = "Name")]
public string Name { get; set; }
[Display(Name = "Start Date")]
public string StartDateTime { get; set; }
[Display(Name = "Participation Status")]
public int SelectedParticipationStatus { get; set; }
public List<SelectListItem> ParticipationStatusList { get; set; }
}
查看(只是 C# for 循环块)
@for (int i = 0; i < Model.Participants.Count; i++)
{
<tr>
@Html.HiddenFor(m => m.Participants[i].ParticipantId)
<td class="text-right">@Model.Participants[i].EventId</td>
<td>@Model.Participants[i].Name</td>
<td>@Model.Participants[i].StartDateTime</td>
<td>@Html.DropDownListFor(
m => m.Participants[i].SelectedParticipationStatus,
Model.Participants[i].ParticipationStatusList,
new { @class = "form-control" })</td>
</tr>
}
控制器(填充初始值,但下拉菜单未设置)
foreach (var i in participantQuery)
{
EditParticipantViewModel theItem = new EditParticipantViewModel()
{
ParticipationStatusList = tblEnum.GetSelectListForConstraintId(CRConstants.PARTICIPATION_STATUS_CONSTRAINT_ID),
ParticipantId = i.a.aID,
EventId = i.c.aID,
Name = i.c.tName,
SelectedParticipationStatus = i.b.nParticipationStatus ?? 0
};
DateTime? startDate = i.d.GetStartDateTime();
theItem.StartDateTime = startDate.HasValue ? startDate.Value.ToString() : "-";
theViewModel.Participants.Add(theItem);
}
这是获取选择列表的代码:
public static List<SelectListItem> GetSelectListForConstraintId(int constraintId)
{
CCSContext db = new CCSContext();
List<SelectListItem> theList = new List<SelectListItem>();
List<tblEnum> enumList = db.Enum.Where(x=>x.nConstraintID == constraintId).OrderBy(x=>x.nOrder).ToList();
foreach (var i in enumList)
{
SelectListItem theItem = new SelectListItem()
{
Text = i.tDisplayName,
Value = i.nIndex.ToString()
};
theList.Add(theItem);
}
return theList;
}
【问题讨论】:
-
只要
SelectedParticipationStatus中存在价值,这应该可以工作。您也可以发布GetSelectListForConstraintId吗? -
@adiga 我已经添加了方法。本质上,我只是遍历数据库中的状态列表,从每个状态中创建一个 selectlistitem,然后返回列表。
-
@adiga 是的,这尤其让我感到困惑,因为我的代码中有其他地方可以做到这一点,而不是每行都有下拉列表的列表。
-
我只记得循环存在问题。试试
@Html.DropDownListFor( m => m.Participants[i].SelectedParticipationStatus, new SelectList(Model.Participants[i].ParticipationStatusList, "Value","Text", Model.Participants[i].SelectedParticipationStatus ), new { @class = "form-control" }) -
@adiga 结果相同。我也将在下面尝试这个答案。
标签: c# asp.net-mvc