将对象从View传递到Controller ASP.NET MVC

时间:2016-10-24 14:37:05

标签: asp.net-mvc entity-framework razor controller

所以我的目的是创建一个允许用户将项目添加到他的购物车的按钮,在db.savechanges方法中它会捕获这些异常:

属性:Item_Name错误:Item_Name字段是必需的。  iisexpress.exe信息:0:属性:Item_Description错误:  Item_Description字段是必需的。小号

我从我的数据库中检查过并且每个项目都填满了所有属性,因为我是asp.net的新手,我肯定会遗漏一些明显不正确的数据。

这是视图(尝试在actionlink中传递项目对象

      @foreach (var item in Model)
    {
        if (index > 6)
        {
            index = 0;
        }
        var newrow = 0;

        if (index == 0)
        {
            newrow = 1;
        }

        if (newrow == 1)
        {
            index++;
            <div class="product-one">
                <div class="col-md-2 product-left">
                    <div class="p-one simpleCart_shelfItem jwe">
                        <a href="single.html">
                            <!-- go to product single view page-->
                            @{ if (item.Image.Image1 != null)
                                {
                                    string imageBase64 = Convert.ToBase64String(item.Image.Image1);
                                    string imageSrc = string.Format("data:image/png;base64,{0}", imageBase64);
                                    <img src="@imageSrc" width="100" height="100" />
                                }
                            }
                            @Html.ActionLink("Add to Cart", "AddToCart", "Carts", new { itemdata = item }, new { @class = "btn btn-primary btn-large" })
                        </a>
                        <br />
                    </div>
                </div>


            </div>

这是控制器:

   public ActionResult AddToCart(Item item)
    {
        //var query = from itemsel in db.Items where item.Item_ID == item.Item_ID select item;
        var newcart = new Cart();
        newcart.Account_ID = 1;
        newcart.Cart_ID = 3;
        newcart.Item_ID = item.Item_ID;
        newcart.Item = item;
        var itemsgroup = db.Items;
        try
        {
            db.Carts.Add(newcart);
            db.SaveChanges();
        }
         catch (DbEntityValidationException dbEx)
        {
            foreach (var validationErrors in dbEx.EntityValidationErrors)
            {
                foreach (var validationError in validationErrors.ValidationErrors)
                {
                    Trace.TraceInformation("Property: {0} Error: {1}",
                                            validationError.PropertyName,
                                            validationError.ErrorMessage);
                }
            }
        }
        return View(itemsgroup.ToList());
    }

这是购物车型号:

 public partial class Cart
     {
        public int Cart_ID { get; set; }
        public int Account_ID { get; set; }
        public int Item_ID { get; set; }

        public virtual Item Item { get; set; }
     }
  }

p.s我知道我的观点很棘手,但我很想完成这个项目很快就会有任何关于更好的方式的建议会受到欢迎

1 个答案:

答案 0 :(得分:0)

由于你遗失了太多的碎片,我只能指出你正确的方向。

下载 Pro ASP.NET MVC 5 book By Adam Freeman 的示例源代码。

提取第9章 - SportsStore,并查看这两个文件 -

SportsStore.WebUI&gt;意见&gt;产品&gt; List.cshtml

@foreach (var p in Model.Products) {
    @Html.Partial("ProductSummary", p)
}

SportsStore.WebUI&gt;意见&gt;分享&gt; ProductSummary.cshtml

请注意,它使用 BeginForm 将单个商品添加到购物车。

@using (Html.BeginForm("AddToCart", "Cart")) {
    <div class="pull-right">
        @Html.HiddenFor(x => x.ProductID)
        @Html.Hidden("returnUrl", Request.Url.PathAndQuery)
        <input type="submit" class="btn btn-success" value="Add to cart" />
    </div>
}