2017-05-01 75 views
0

当按钮被按下时,它表明模型是无效的,因为字段为空。 查看模型时,所有字段都为空或为空。任何人都知道如何解决这个问题,谢谢属性信息未找到

家庭控制器

[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"); 
    } 

首页指标 - 显示的产品信息显示在屏幕

@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

表单只提交其成功表单控件的名称/值对,并且不生成任何表单控件。但是你只能提交一个表格,所以你为什么要生成多个'

'元素? –

回答

0

的问题是,没有你的领域都与他们只显示它的模型,以便修复这个问题 您可以简单地添加一个hiddenfor字段,将您产品页面中的产品ID链接起来,就像您的每个产品一样:

@Html.HiddenFor(product.Id) 

然后填写你需要与被会被传递给你的控制器作为参数ID的信息其余

为例:

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

我不太明白什么是你想要做,但路易斯是对的。如果您试图传回值,则必须使用@Html.EditorFor()或其他方式将信息传递回服务器。

您也可以使用@Html.HiddenFor(product.Id),然后在您的Actionmethod内部调用数据库以获取有关产品的其余信息,或者也可以使用JQuery

在这种情况下,我只会使用@Html.HiddenFor(product.Id)并有一个static辅助方法,它将映射orderline类从DB类。

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

但同样你可以只添加FirstOrDefault()线控制器里面,你不是从ViewModel映射到业务Model