找不到属性信息

时间:2017-05-01 17:07:16

标签: c# asp.net-mvc-5

按下按钮时,表示模型无效,因为字段为空。 在查看模型时,所有字段都为空或为空。任何人都知道如何解决这个问题,谢谢

家庭控制器

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

2 个答案:

答案 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辅助方法来映射orderlineDB

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

但是,您再次可以在控制器中添加FirstOrDefault()行,因为您没有从ViewModel映射到商家Model