2015-10-06 2 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 с заданным значением, потому что мне не удалось сопоставить правую часть условия 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); 
    } 

Параметры НАПИСАТЬ происходят из вызов функции из контроллера значения параметра. Параметры: OptionValueID и OptionID.

Я не знаю, есть ли у меня правильный подход для достижения этой задачи.

Дополнительные комментарии

Даже с заданным значением в списке не работает. Там нет компиляции или во время выполнения ошибки

Отладочной

я получаю два значения от оператора выбора, но оба значения совпадают. Это соответствует только первому значению строки из требуемой таблицы.

+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

Смежные вопросы