2015-10-06 91 views
1

我有以下類,並希望根據特定條件篩選下拉列表。應用過濾生成下拉列表

模型類

public class Option 
{ 
    public int OptionID { get; set;} 
    public string OptionName { get; set; } 

    public int TechnicalCharacteristicID { get; set; } 
    public int LsystemID { get; set; } 

    public virtual ICollection<OptionValue> OptionValues { get; set; } 
    public virtual TechnicalCharacteristic TechnicalCharacteristic { get; set; } 
    public virtual Lsystem Lsystem { get; set; } 
} 

public class OptionValue 
{ 
    public int OptionValueID { get; set; } 
    public string OptionVal { get; set; } 
    public int OptionID { get; set; } 

    public virtual Option Option { get; set; } 
    public virtual ICollection< SetValue> SetValue { get; set; } 
} 

public class SetValue 
{ 
    public int SetValueID { get; set; } 
    public string Value { get; set; } 
    public bool Status { get; set; } 

    public int TcSetID { get; set; } 
    public int OptionValueID { get; set; } 

    public virtual OptionValue OptionValue { get; set; } 
    public virtual TcSet TcSet { get; set; } 

} 

public class TcSet 
{ 
    public int TcSetID { get; set; } 
    public string SetName { get; set; } 
    [Display(Name = "PhysicalUnit")] 
    public string PhysicalUnit { get; set; } 

    public int TechnicalCharacteristicID { get; set; } 
    public int DataFormatID { get; set; } 

    public virtual ICollection<SetValue> SetValues { get; set; } 
    public virtual DataFormat DataFormat { get; set; } 
    public virtual TechnicalCharacteristic TechnicalCharacteristic { get; set; } 
} 

public class TechnicalCharacteristic 
{ 
    public int TechnicalCharacteristicID { get; set; } 
    public string TCName { get; set; } 

    public virtual ICollection<TcSet> TcSets { get; set; } 
    //public virtual ICollection<Option> Options { get; set; } 
} 

我想實現

我要救值在SetVal每個選項。將DropDownList在SetVal需要過濾基於下面的條件下產生(因爲它使用參數從其他類我不能執行的條件本身)

OptionValue.Option.TechnicalCharacteristicID == TcSet.TCID 

我有以下的控制器類。我已將選擇條件等同於預設值,因爲我無法匹配選擇條件的右側。

我需要在表中顯示select的結果。當我嘗試將現有的解決結果表它顯示的類型不是IEnumerable的,即使它被宣佈在模型類的IEnumerable ..

控制器

public ActionResult Create(int OptionValID, int OptionID) 
    { 
     var model = new SetValue 
     { 
      OptionValueID = OptionValID 
     }; 
     //var tcid = 
     // ViewBag.OptionValueID = new SelectList(db.OptionValue, "OptionValueID", "OptionVal"); 
     var tcSet = db.SetValue.Include(x=>x.TcSet).FirstOrDefault(x=>x.OptionValue.Option.TechnicalCharacteristicID==4); 
     if (tcSet!=null) 
     { 
      model.TcSet = tcSet.TcSet; 
     } 
     ViewBag.TcSetID = new SelectList(db.TcSet, "TcSetID", "SetName"); 
     return View(model); 
    } 

用於創建來自參數來自選項值控制器的函數調用。參數是OptionValueIDOptionID

我不知道我是否有正確的方法來完成任務。

附加評論

即使採用預設值列表不起作用。有沒有編譯或運行時錯誤

調試細節

我從select語句兩個值,但兩者的值是相同的。它只對應於所需表格中行的第一個值。

+0

使用以下代碼生成您的選擇列表數據 – alikuli

回答

1

使用下面的代碼來生成您的選擇列表中的數據

public IEnumerable<SelectListItem> SelectList() 
    { 
     List<SelectListItem> selectList = new List<SelectListItem>(); 
     var listOfCat1 = db.TcSets.ToList(); 

     if (listOfCat1 != null) 
     { 
      if (listOfCat1.Count>0) 
      { 
       foreach (var item in listOfCat1) 
       { 
        SelectListItem sVM = new SelectListItem(); 
        sVM.Value = item.Id.ToString(); 
        sVM.Text = item.Name; 
        selectList.Add(sVM); 
       } 
      } 
     } 

     return selectList.AsEnumerable(); 

    } 

然後,把下面的代碼在你的控制器調用視圖

ViewBag.ProductCategoriesList = SelectList(); 

您認爲之前,調用與下拉列表下面的代碼行

<div class="form-group" > 
     @Html.LabelFor(model => model.TcSetID , "Product Category", htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
     @Html.DropDownListFor(x => x.TcSetID , @ViewBag.ProductCategoriesList as IEnumerable<SelectListItem>, "--- Select Tc Set ---", new { @class = "form-control", @style = "background-color:yellow;border-color:royalblue" }) 
      @Html.ValidationMessageFor(model => model.TcSetID , "", new { @class = "text-danger" }) 
     </div> 
    </div> 

我希望這有助於。

+0

謝謝。我會嘗試你的代碼。但我已經發現另一個可能不是最佳實踐。 – Vini

+0

讓我們看看你找到了什麼。它可能會幫助別人。 – alikuli

+0

當然,我明天還會添加我的答案。代碼在我的辦公室.. – Vini