如何在ViewBag中传递变量列表

时间:2018-07-04 10:12:09

标签: .net asp.net-mvc linq viewbag

我正在做一个项目,我只需要从两个表中获取数据,我想使用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的定义。 尽管我已经尝试调试,并且item也正在获取值,但是我不确定如何显示它们,

这是我得到的值的屏幕截图 item变量中的值:
Values in item variable

这也是错误的屏幕截图:

Error

3 个答案:

答案 0 :(得分:1)

您正在使用匿名类型。在这种情况下将无法正常工作。使用已知类型或动态类型。即:

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>
}

答案 1 :(得分:1)

您可以在控制器中创建新类:

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....
}

答案 2 :(得分:1)

{
public int ID{get; set;}
public string Name{get; set;}  
}

在CSHTML中使用以下语法:

@{
var items = (Params)ViewBag.Parameters;
}
@foreach(var item in items){
//body
}