Передача объекта из представления в контроллер ASP.NET MVC

#asp.net-mvc #entity-framework #razor #controller

#asp.net-mvc #entity-framework #razor #контроллер

Вопрос:

итак, мое намерение состоит в том, чтобы создать кнопку, позволяющую пользователю добавлять товар в свою корзину, в методе db.savechanges, который улавливает эти исключения :

Свойство: Ошибка Item_Name: поле Item_Name является обязательным. iisexpress.exe Информация: 0 : Свойство: Ошибка Item_Description: поле Item_Description является обязательным. s

я проверил из своей базы данных, и у каждого отдельного элемента заполнены все их свойства, поскольку я новичок в asp.net я, конечно, упускаю что-то очевидное, что портит мои данные.

это представление (попытка передать объект item в 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());
    }
  

и это модель cart:

  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. Что в представлении является элементом object? Я не могу понять этот фрагмент кода. Или более точно, как выглядит класс Item и что вам нужно отправить из представления в контроллер?

2. я отредактирую вопрос, дайте мне минутку

Ответ №1:

Поскольку вам не хватает слишком многих частей, я мог бы только указать вам правильное направление.

Загрузите пример исходного кода Pro ASP.NET Книга Адама Фримена по MVC 5.

Извлеките главу 9 — SportsStore и посмотрите на эти два файла-

Спортивный магазин.WebUI> Просмотры> Продукт> List.cshtml

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

Спортивный магазин.WebUI > Views > Shared > 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>
}
  

Комментарии:

1. Спасибо, я решил свою проблему, передав идентификатор объекта с использованием TempData, но это далеко не лучшая практика, из-за крайнего срока назначения я даже не могу придумать наилучшую практику, мне просто нужно заставить все это работать, но, спасибо, мне нужен такой ресурс 🙂