如何在<;标签>;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"不包含的定义"项目名称">
您必须投射从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
}