简体   繁体   English

如何在ViewBag中传递变量列表

[英]How to pass variable list in ViewBag

I am working on a project I just need to grab data from two tables and I want to use LINQ Query to fetch data. 我正在开发一个项目,我只需要从两个表中获取数据,我想使用LINQ Query来获取数据。

Inside my Controller: 在我的控制器内:

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;

And I want to use this Parameters in my razor as: 我想在剃须刀中使用这个参数:

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

It is currently giving me error that object as no definition for ParameterId. 它目前给我错误,该对象没有ParameterId的定义。 Although I have tried debugging and item is getting values as well but I am not sure how to display them, 虽然我已经尝试过调试,但是item也获得了值,但我不知道如何显示它们,

Here is screen shot of values I am getting Values in item variable: 以下是我在项目变量中获取值的屏幕截图:
项变量中的值

Also Here is Screen shot of the error: 这里是错误的屏幕截图:

错误

You are using an anonymous type. 您使用的是匿名类型。 It wouldn't work in this case. 在这种情况下它不起作用。 Either use a known type or dynamic. 使用已知类型或动态。 ie: 即:

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

In view: 在视图中:

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

You can make a new class in your controller: 您可以在控制器中创建一个新类:

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

In View You can use it like this 在视图中您可以像这样使用它

@{
var items = (Params)ViewBag.Parameters;
}
@foreach(var item in items){
your code for html....
}
{
public int ID{get; set;}
public string Name{get; set;}  
}

Use this syntax in your CSHTML: 在CSHTML中使用此语法:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM