Как передать список переменных во ViewBag - PullRequest
0 голосов
/ 04 июля 2018

Я работаю над проектом, мне просто нужно получить данные из двух таблиц, и я хочу использовать LINQ Query для извлечения данных.

Внутри моего контроллера:

var Parameters = (from test in _db.tblAddTests
               join par in _db.tblParameters on test.AddTestId equals 
               par.TestId
               where par.ParameterDatatype == 3
               select new
               {
                ParameterId = par.ParameterId, 
                ParameterName = par.ParameterName,
                TestName = test.TestName
                }
            ).ToList();
ViewBag.Parameters = Parameters;

И я хочу использовать эти параметры в моей бритве как:

@foreach (var item in ViewBag.Parameters)
{
    <option value="@item.ParameterId">@item.ParameterName - @item.TestName</option>
}

В настоящее время я получаю сообщение об ошибке, что объект не определен для ParameterId. Хотя я пробовал отладку, и элемент тоже получает значения, но я не уверен, как их отобразить,

Вот снимок экрана значений, которые я получаю Значения в переменной элемента:
Values in item variable

Также вот снимок экрана с ошибкой:

Error

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Вы можете создать новый класс в вашем контроллере:

public class Params
{
public int ParameterId {get; set;}
public string ParameterName {get; set;}  
public string TestName {get; set;}
}

На виду Вы можете использовать это так

@{
var items = (Params)ViewBag.Parameters;
}
@foreach(var item in items){
your code for html....
}
0 голосов
/ 04 июля 2018

Вы используете анонимный тип. Это не сработает в этом случае. Либо используйте известный тип или динамический. то есть:

var Parameters = (from test in _db.tblAddTests
               join par in _db.tblParameters on test.AddTestId equals 
               par.TestId
               where par.ParameterDatatype == 3
               select new ParamsClass
               {
                ParameterId = par.ParameterId, 
                ParameterName = par.ParameterName,
                TestName = test.TestName
                }
            ).ToList();
ViewBag.Parameters = Parameters;

public class ParamsClass
{
  public int ParameterId {get; set;}
  public string ParameterName {get; set;}  
  public string TestName {get; set;}
}

В поле зрения:

@foreach (ParamsClass item in ViewBag.Parameters)
{
    <option value="@item.ParameterId">@item.ParameterName - @item.TestName</option>
}
...