C# 如何将对象中的值包括在内<;标签>;ASP.NET MVC 5中的html标记

C# 如何将对象中的值包括在内<;标签>;ASP.NET MVC 5中的html标记,c#,html,asp.net-mvc,viewbag,C#,Html,Asp.net Mvc,Viewbag,我需要在和html标记中包含来自控制器的ViewBag的对象值。以下是我在查看页面中使用的内容: foreach (var stockItem in ViewBag.joinqry2) { <div class="col-md-2"> <label style='font-weight:normal;' name='InstockID' value= 'stockItem.ItemName' ><span> @(stockIte

我需要在
html标记中包含来自控制器的ViewBag的对象值。以下是我在查看页面中使用的内容:

foreach (var stockItem in ViewBag.joinqry2)
{
      <div class="col-md-2">
          <label style='font-weight:normal;' name='InstockID' value= 'stockItem.ItemName' ><span> @(stockItem.ItemName) </span></label>
          <input class='form-control input_field stockItem' name='labOrder.ConsumedInventories[ + i + ].ConsumedQuantity' type='number' id='" + data[i].Instock + "' min='0' value= '"+ stockItem.ConsumedQuantity + "'/>
     </div>
}
StockItem在foreach循环中包含ConsumedQuantity和ItemName值,但仍会出现如下错误:

我的错误是:

类型的例外 中出现“Microsoft.CSharp.RuntimeBinder.RuntimeBinderException” App_Web_euru3gao.dll,但未在用户代码中处理

其他信息:“对象”不包含的定义 “项目名称”


您必须强制转换从ViewBag检索到的项目。在当前实现中,stockItem是一个
对象
,因此它不包含属性ItemName

正如BviLLe_Kid提到的,更简洁的方法是使用ViewModel:

public class ConsumedItemModel {
    public int ConsumedQuantity {get; set;}
    public string ItemName {get; set;}
}
在cshtml文件中,使用
@model
指令告诉Razor应该使用哪个ViewModel。如果需要其他属性,请创建一个ViewModel,其中还包含
ConsumedItemModel
的集合作为属性。以下假设您仅从控制器传递
ConsumedItemModel
的集合

@model IList<ConsumedItemModel>
foreach (var stockItem in Model) {
    var name = stockItem.ItemName;
    var qty = stockItem.ConsumedQuantity;
    // render label and input
}
@model-IList
foreach(模型中的var stockItem){
var name=stockItem.ItemName;
var数量=库存项目。消耗数量;
//渲染标签和输入
}

您必须强制转换从ViewBag检索到的项目。在当前实现中,stockItem是一个
对象
,因此它不包含属性ItemName

正如BviLLe_Kid提到的,更简洁的方法是使用ViewModel:

public class ConsumedItemModel {
    public int ConsumedQuantity {get; set;}
    public string ItemName {get; set;}
}
在cshtml文件中,使用
@model
指令告诉Razor应该使用哪个ViewModel。如果需要其他属性,请创建一个ViewModel,其中还包含
ConsumedItemModel
的集合作为属性。以下假设您仅从控制器传递
ConsumedItemModel
的集合

@model IList<ConsumedItemModel>
foreach (var stockItem in Model) {
    var name = stockItem.ItemName;
    var qty = stockItem.ConsumedQuantity;
    // render label and input
}
@model-IList
foreach(模型中的var stockItem){
var name=stockItem.ItemName;
var数量=库存项目。消耗数量;
//渲染标签和输入
}

检查您的可视包是否已正确填充或not@BharatPatidar .. 是的,填写正确。。。我甚至在foreach内部进行了检查,每个stockItem都带有单独的ItemName和ConsumedQuantity数据,仅供参考,这被认为是不好的做法。。您需要为此创建强类型ViewModel。它将有助于以后维护代码,而且通常更干净。。。但无论如何。。。保存属性
ConsumedQuantity
ItemName
的类名是什么?@BviLLe\u Kid。。。谢谢你的信息。。我试试你的方法。。。ViewBag.joinqry2是通过连接两个表生成的。。即ConsumedQuantity和ItemName来自两个不同的表检查您的ViewBag是否正确填充或not@BharatPatidar .. 是的,填写正确。。。我甚至在foreach内部进行了检查,每个stockItem都带有单独的ItemName和ConsumedQuantity数据,仅供参考,这被认为是不好的做法。。您需要为此创建强类型ViewModel。它将有助于以后维护代码,而且通常更干净。。。但无论如何。。。保存属性
ConsumedQuantity
ItemName
的类名是什么?@BviLLe\u Kid。。。谢谢你的信息。。我试试你的方法。。。ViewBag.joinqry2是通过连接两个表生成的。。也就是说,ConsumedQuantity和ItemName来自两个不同的表