根据同一行中的一个值(模型值)填充一个razor下拉列表

本文关键字:一个 模型 下拉列表 填充 razor 一行 | 更新日期: 2023-09-27 18:02:57

我使用以下语法在MVC中填充下拉列表,下拉列表正确地绑定了值。但是我想在将'SelectList'绑定到下拉列表之前过滤它。

@foreach (var item in Model.Requests)
  <tr>                     {
      <td>
           @Html.DisplayFor(modelItem => item.AssignedTo)
      </td>
      <td>
            @Html.DisplayFor(modelItem => item.StartedOn)
      </td>
      <td>
            @Html.DropDownListFor(m => m.RequestStatus, new SelectList(Model.RequestStatus, "StatusID", "StatusDescription"))
      </td>
  </tr>

我有一个模型,RequestStatus如下,

 public class RequestStatusModel
 {
     public string RequestID { get; set; }
     public string StatusID { get; set; }
     public string StatusDescription { get; set; }
 }

视图模型'RequestModel'如下所示,网格绑定请求集合数据。即列表请求,其中包含RequestID字段。

public class RequestModel
{
     public IList<Request> Requests { get; set; }
     public IList<RequestStatusModel> RequestStatus { get; set; }
}


RequestStatusModel中的示例数据。

  RequestID       StatusID          StatusDescription
  ====================================================     
      111           1000              Assigned
      111           1001              UnAssigned
      111           1002              In progress
      222           1003              Started
      222           1004              In progress
      222           1005              Stopped
      333           1006              Assigned
      333           1007              Completed


请求集合中的示例数据

RequestID   AssignedTo   StartedOn
  111         SAM        05/12/2012
  333         KEN        02/23/2006
  222         RAJ        11/30/2006

现在下拉列表绑定了所有的StatusDescription,但我想绑定的 StatusDescription 从RequestStatusModel基于 requesttid 在请求集合

根据同一行中的一个值(模型值)填充一个razor下拉列表

希望这是你需要的

public class RequestModel
{
    public IList<Request> Requests { get; set; }
    public IList<RequestStatusModel> RequestStatus { get; set; }
    public IEnumerable<RequestStatusModel> FilteredRequestStatus
    {
        get
        {
            return RequestStatus.Where(rs => Requests.Select(r => r.RequestID).Contains(rs.RequestID));
        }
    }
}

和你的视图

@foreach (var item in Model.Requests)
  <tr>                     {
      <td>
           @Html.DisplayFor(modelItem => item.AssignedTo)
      </td>
      <td>
            @Html.DisplayFor(modelItem => item.StartedOn)
      </td>
      <td>
            @Html.DropDownList("RequestStatus", new SelectList(Model.FilteredRequestStatus, "StatusID", "StatusDescription"))
      </td>
  </tr>