如何在<;标签>;html标记

本文关键字:gt html 标记 标签 lt | 更新日期: 2023-09-27 18:11:57

我需要在<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循环中包含ConsumerQuantity和ItemName值,但我仍然收到如下错误:

我的错误是:

类型的异常中出现"Microsoft.CSharp.RuntimeBinder.RuntimeBinderException"App_Web_euru3gao.dll,但未在用户代码中处理

附加信息:"object"不包含的定义"项目名称">

如何在<;标签>;html标记

您必须投射从ViewBag中检索到的项目。在您当前的实现中,stockItem是一个object,因此它不包含属性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
}