2017-05-01 5 views
0

Wenn die Schaltfläche gedrückt wird, wird das Modell als ungültig angezeigt, da die Felder leer sind. Beim Betrachten des Modells sind alle Felder leer oder null. Wer weiß, wie dieses Problem zu lösen, dankAttributinformationen nicht gefunden

Home Controller

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> createOrderLine(Product models) 
    {  
     if (ModelState.IsValid) 
     { 
      db.OrderLines.Add(new OrderLine 
      { 
       productId = models.productId, 
       productColour = models.productColour, 
       productDescription = models.productDescription, 
       productName = models.productName, 
       productPrice = models.productPrice, 
       productStock = models.productStock, 
       //QuantityOrdered = quantityOrdered 
      }); 

      db.SaveChanges(); 

      return RedirectToAction("Index", "OrderLines"); 
     } 

     else return RedirectToAction("Index", "Home"); 
    } 

Home Index - Zeigt die Produktinformationen auf dem Bildschirm

@foreach (var product in Model) 
{ 

using (Html.BeginForm("createOrderLine", "Home", FormMethod.Post, new { 
@class = "form-horizontal", role = "form" })) 
{ 

<div class="row"> 
    <div class="blog col-md-6"> 
     <div> 
      <h1>Product Name</h1> 
      <h2>@product.productName</h2> 

      <div> 


       <h3>Product Description</h3> 

       <h6><i>@product.productDescription</i></h6> 

       <br /> 
       <h3>Product Price</h3> 

       <td>@product.productPrice </td> 
       <br /> 
       <h1>Product colour</h1> 

       <td>@product.productColour</td> 
       <div></div> 

       <br /> 
       <br />  

        @Html.AntiForgeryToken() 
       <div class="form-group"> 
        <div class="col-md-offset-2 col-md-10"> 
         <input type="submit" class="btn btn-buy" value="Add to cart" onclick="btnbuy_Click" /> 

        </div> 
       </div>     
      </div> 
     </div> 
     <br /> 
    </div> 
    </div> 
} 
} 
+0

Ein Formular übermittelt nur die Name/Wert-Paare seiner erfolgreichen Formularsteuerelemente, und Sie generieren keine Formularsteuerelemente. Aber Sie können nur ein Formular einreichen, warum generieren Sie mehrere '

' Elemente? –

Antwort

0

das Problem ist, dass keine Ihrer Feld verknüpft sind Das Modell zeigt sie nur so an, um dieses zu beheben Sie können einfach ein hiddenfor-Feld hinzufügen, das die Produkt-ID auf Ihrer Seite so für jedes Produkt verknüpft:

@Html.HiddenFor(product.Id) 

dann den Rest der Informationen füllen Sie mit der ID benötigen, das würde zu dem Controller als Parameter übergeben wird, wird

exemple:

public ActionResult createorderline(Product ProductToAdd) 
{ 
// add your product or do your treatment 
} 
0

ich nicht ganz verstehen, was Sie versuchen, zu tun, aber Louis hat Recht. Wenn Sie versuchen, Werte zurück zu geben, müssen Sie @Html.EditorFor() oder einige andere Möglichkeiten, Informationen an den Server zurückgeben.

Sie könnten auch verwenden @Html.HiddenFor(product.Id) dann innerhalb Ihrer Actionmethod rufen Sie die Datenbank, um den Rest der Informationen über Ihr Produkt zu erhalten, oder Sie könnten JQuery auch verwenden.

In diesem Fall würde ich nur die @Html.HiddenFor(product.Id) verwenden und eine static Hilfsmethode, die Ihre orderline Klasse von den DB abbildet.

public static Product GetProductById(int productId){ 
    return db.Products.FirstOrDefault(x => x.Id == productId); 
} 

Aber auch hier konnte man nur die FirstOrDefault() Linie in Ihrem Controller hinzufügen, wie Sie nicht Model von einem ViewModel zu einem Business-Mapping.