如何在ViewBag中传递变量列表

问题描述 投票:1回答:2

我正在开发一个项目,我只需要从两个表中获取数据,我想使用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也获得了值,但我不知道如何显示它们,

以下是我在项目变量中获取值的屏幕截图: Values in item variable

这里是错误的屏幕截图:

Error

.net asp.net-mvc linq viewbag
2个回答
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....
}

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>
}
© www.soinside.com 2019 - 2024. All rights reserved.