asp.net-mvc如何将

标签: Asp.net-MVC HTML C#
发布时间: 2017/2/20 21:09:22
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我需要包括从来自控制器通过 ViewBag 内的对象的值 <label><input> 的 html 标记。以下是我使用视图页内︰

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 包含 ConsumedQuantity 和项目名称值在 foreach 循环内的,但我仍然得到像下面这样的错误︰

我的错误是︰

'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' 类型的异常发生在 App_Web_euru3gao.dll 中,但不在用户代码中处理

附加信息: '对象' 不包含定义为项目名称

解决方法 1:

你要投票从 ViewBag 中检索的项。在当前实现中,stockItem 是 object ,因此它不包含项目名称的属性。

作为 BviLLe_Kid 提到,清洁的方法是使用视图模型︰

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

在 cshtml 文件中,使用 @model 指令告诉Razor哪个 ViewModel 期望。如果你需要额外的属性,创建视图,还包含的集合 ConsumedItemModel 作为一个属性。以下假设你只有通过收集 ConsumedItemModel 从控制器。

@model IList<ConsumedItemModel>
foreach (var stockItem in Model) {
    var name = stockItem.ItemName;
    var qty = stockItem.ConsumedQuantity;
    // render label and input
}
官方微信
官方QQ群
31647020