Последовательность не содержит элементов при обновлении объекта - PullRequest
2 голосов
/ 31 марта 2019

Я хочу обновить свою сущность Product, но всякий раз, когда я отправляю форму, она выдает:

System.InvalidOperationException: «Последовательность не содержит элементов»

Этомой вид:

@model myadminpanel.Models.product
@using (Html.BeginForm())
{
    <div class="container">
        <div class="form-group">
            <label>ProductName</label>
            @Html.TextBoxFor(x => x.ProductName, new { @class = "form-control" });
        </div>
        <div class="form-group">
            <label>ProductDescription</label>
            @Html.TextBoxFor(x => x.ProductDescription, new { @class = "form-control" });
        </div>
        <div class="form-group">        
            <label>Price</label>
            @Html.TextBoxFor(x => x.Price, new { @class = "form-control" });
        </div>
        <div class="form-group">

            <label>Quantity</label>
            @Html.TextBoxFor(x => x.Quantity, new { @class = "form-control" });

        <div class="button">        
            <button>Submit</button>        
        </div>        
    </div>
}

мой контроллер Редактировать код такой:

public ActionResult ProductEdit(int id)
{
    var item = db.products.Where(x => x.ProductID == id).First();

    return View(item);


}
[HttpPost]
public ActionResult ProductEdit(product model)
{
    var item = db.products.Where(x => x.ProductID == model.ProductID).First();
    item.ProductName= model.ProductName;
    item.ProductDescription = model.ProductDescription;
    item.Price = model.Price;
    item.Quantity = model.Quantity;

    db.SaveChanges();
    return View();
}

И это моя модель продукта:

namespace myadminpanel.Models
{
    using System;
    using System.Collections.Generic;

    public partial class product
    {
        public int ProductID { get; set; }
        public string ProductName { get; set; }
        public string ProductDescription { get; set; }
        public Nullable<decimal> Price { get; set; }
        public Nullable<int> Quantity { get; set; }
        public string CategoryName { get; set; }
        public Nullable<int> CategoryID { get; set; }

        public virtual category category { get; set; }
    }
}

1 Ответ

2 голосов
/ 31 марта 2019

Ваша форма не содержит идентификатор сущности, которую вы изменяете, поэтому это

var item = db.products.Where(x => x.ProductID == id).First();

запускается как

var item = db.products.Where(x => x.ProductID == 0).First();

и нет продукта с идентификатором = 0, поэтому First не удается найти первое совпадение (потому что не с чем сопоставить).

Итак, добавьте идентификатор в качестве скрытого поля:

@using (Html.BeginForm())
{
     @Html.HiddenFor(model => model.ProductID)

    <div class="container">  
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...