【问题标题】:How to pass variable list in ViewBag如何在 ViewBag 中传递变量列表
【发布时间】:2018-07-04 10:12:08
【问题描述】:

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

这是我得到的值的屏幕截图 项目变量中的值:

这里是错误的屏幕截图:

【问题讨论】:

  • 简单的类型转换怎么样?
  • 我试图像这样在 ArrayList 中转换它 @{ var list = ViewBag.Parameters as ArrayList; }
  • 您的代码是一个非常糟糕的主意 - 没有强类型模型绑定,没有客户端验证,所选项目,如果返回视图等将丢失等。使用 @Html.DropDownListFor() 方法生成你的&lt;select&gt; 并将IEnumerable&lt;SelectListItem&gt; 传递给视图
  • 感谢斯蒂芬的建议,但我根本不想使用它,因为这只是一个示例,我稍后必须使用多个模型,所以它们会给我带来麻烦:p

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


【解决方案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>
}

【讨论】:

  • 非常感谢 -Cetin Basoz
【解决方案2】:

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

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

【讨论】:

  • 非常感谢 Ishfaq 我真的得到了答案 :)
【解决方案3】:
{
public int ID{get; set;}
public string Name{get; set;}  
}

在您的 CSHTML 中使用此语法:

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

【讨论】:

    猜你喜欢
    • 2022-07-13
    • 1970-01-01
    • 2017-02-09
    • 1970-01-01
    • 2021-05-15
    • 2020-01-03
    • 2013-02-23
    • 2020-11-04
    • 1970-01-01
    相关资源
    最近更新 更多