如何在 ASP.NET MVC 5 中包含来自 <label> html 标记内对象的值

How to include values from object inside <label> html tag in ASP.NET MVC 5

我需要在 <label><input> 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>
}

ViewBag.joinqry2:

{ ConsumedQuantity = 1, ItemName = "Streck Tube" }
{ ConsumedQuantity = 1, ItemName = "Bubble Wrap" }
{ ConsumedQuantity = 7000, ItemName = "Biohazard Bag" }
{ ConsumedQuantity = 1, ItemName = "Absorbent Papers" } 
{ ConsumedQuantity = 1, ItemName = "Test Tube" }    

StockItem 在 foreach 循环中包含 ConsumedQuantity 和 ItemName 值,但我仍然收到如下错误:

我的错误是:

An exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in App_Web_euru3gao.dll but was not handled in user code

Additional information: 'object' does not contain a definition for 'ItemName'

您必须投射从 ViewBag 检索到的项目。在您当前的实现中,stockItem 是一个 object,因此它不包含 属性 ItemName。

如 BviLLe_Kid 所述,更简洁的方法是使用 ViewModel:

public class ConsumedItemModel {
    public int ConsumedQuantity {get; set;}
    public string ItemName {get; set;}
}

在您的 cshtml 文件中,使用 @model 指令告诉 Razor 需要哪个 ViewModel。如果您需要其他属性,请创建一个包含 ConsumedItemModel 集合作为 属性 的 ViewModel。下面假设你只从控制器传递 ConsumedItemModel 的集合。

@model IList<ConsumedItemModel>
foreach (var stockItem in Model) {
    var name = stockItem.ItemName;
    var qty = stockItem.ConsumedQuantity;
    // render label and input
}