2016-04-26 106 views
1

這是一個非常基本的問題,我已經搜索了一個答案,但似乎沒有被發現。這是使用VS2015處理Scaffolded MVC5 edit.cshtml。MVC過濾器使用實體框架腳手架和剃刀下拉列表

我有2個表之間有1:M的關係,並且子表具有@ Html.DropDownList作爲父項的外鍵。我需要過濾@ Html.DropDownList。這些是具體的:

一個AssociationList有許多AgsweepParameters。

AssociationList的主鍵是AssociationListId 因此,AssociationListId字段是AgsweepParameter表中的外鍵。

使用EntityFramework和MVC5腳手架,我創建了使用實體框架作爲模型的crud視圖/控制器。

該下拉生成的聲明如下所示:

  <div class="form-group"> 
       @Html.LabelFor(model => model.AssociationListId, "Association:", htmlAttributes: new { @class = "control-label col-md-2" }) 
       <div class="col-md-10"> 
        @Html.DropDownList("AssociationListId", null, htmlAttributes: new { @class = "form-control" }) 
        @Html.ValidationMessageFor(model => model.AssociationListId, "", new { @class = "text-danger" }) 
       </div> 
      </div> 

問:我如何篩選下拉列表,以便AssociationList.AssociationType ==「ACA」?

請注意,我用一個類似的過濾器上Index.cshtml上AssociationList表看起來像這樣:

  @foreach (var item in Model.Where(row=>row.AssociationType=="ACA")) { 
       <tr> 
        <td> 
         @Html.DisplayFor(modelItem => item.Name) 
        </td> 
        <td> 
         @Html.ActionLink("Edit", "Edit", new { id=item.AssociationListId }) | 
         @Html.ActionLink("Delete", "Delete", new { id=item.AssociationListId }) 
        </td> 
       </tr> 
      } 

回答

1

基本MVC在這裏。我必須執行以下操作:

瞭解控制器是定義過濾器而不是視圖的對象。 因此,我去給控制器公衆的ActionResult編輯(INT?ID)和改變

  ViewBag.AssociationListId = new SelectList(filteredAssociations, "AssociationListId", "Name", agsweepParameter.AssociationListId); 

  IEnumerable<AssociationList> filteredAssociations = db.AssociationLists.Where(row => row.AssociationType == "ACA"); 
      ViewBag.AssociationListId = new SelectList(filteredAssociations, "AssociationListId", "Name", agsweepParameter.AssociationListId);