2016-10-07 1 views
0

Ich muss Wert von Objekt, das von Controller über ViewBag innerhalb der <label> und <input> html-Tag kommt. Hier finden Sie die ich in der Ansicht Seite verwendet:Wie Sie Werte von Objekt innerhalb <label> HTML-Tag in ASP.NET MVC 5

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" }  

Lager lieferbar enthält ConsumedQuantity und ItemName Werte innerhalb der foreach-Schleife, aber ich bin immer noch Fehler immer wie diese unten:

Mein Fehler ist:

Eine Ausnahme vom Typ ‚Microsof t.CSharp.RuntimeBinder.RuntimeBinderException‘aufgetreten in App_Web_euru3gao.dll wurde aber in Benutzercode

Zusätzliche Informationen nicht behandelt: 'Objekt' enthält keine Definition für 'ItemName'

+0

Überprüfen Sie Ihre ViewBag richtig gefüllt oder nicht – Bharat

+0

@BharatPatidar .. ja, es ist richtig gefüllt ... Ich habe sogar in der foreach geprüft und jedes Lager lieferbar trägt einzelne ItemName und ConsumedQuantity Daten – Shamsheerkhan

+0

So wie ein FYI dies als schlechte Übung .. Sie müssen ein stark typisiertes ViewModel dafür erstellen. Es hilft bei der späteren Pflege des Codes und ist im Allgemeinen sauberer ... aber trotzdem ... Was ist der Klassenname, der die Eigenschaften 'ConsumedQuantity' und' ItemName' enthält? –

Antwort

2

Sie müssen Wirf das Objekt aus dem ViewBag. In Ihrer aktuellen Implementierung ist stockItem ein object, daher enthält es keine Eigenschaft ItemName.

Wie BviLLe_Kid erwähnt, ist der Reiniger Weg, um eine Ansichtsmodell zu verwenden:

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

In Ihrer cshtml Datei, verwenden Sie die @model Richtlinie Razor zu sagen, welche Ansichtsmodell zu erwarten. Wenn Sie zusätzliche Eigenschaften benötigen, erstellen Sie ein ViewModel, das auch die Auflistung ConsumedItemModel als Eigenschaft enthält. Im Folgenden wird davon ausgegangen, dass Sie nur die Sammlung ConsumedItemModel vom Controller übergeben.

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

und BviLLe_Kid .. danke für die Antwort und Vorschlag .... es funktioniert gut für mich – Shamsheerkhan