按下按钮时,表示模型无效,因为字段为空。 在查看模型时,所有字段都为空或为空。任何人都知道如何解决这个问题,谢谢
家庭控制器
[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
}
答案 1 :(得分: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
。