ahmedbelal Ответов: 2

Нет элемента viewdata типа 'ienumerable<selectlistitem>', который имеет ключ 'categoryid'. ? ? ?


Я работаю над коммерческим проектом для продажи продукта в Интернете я хочу сначала создать новый проект и Iam используя код и установить связь между продуктом и категорией
и когда вы пытаетесь создать новый продукт это сообщение отображается мне

(
There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'Categoryid')

but I noticed something more mysterious
Although error shown to me but when I open list of product new product is saved after I 
Close error message
 and in this project I try to make photo to each product 
and when I clear and delete upload and photo the error Solved
So I want to upload photo to each product without  this ERROR

What I have tried:

my Action Result 
<pre>    public ActionResult Create()
        {
            var CategoryList = dbcontext.category.ToList();
            List<SelectListItem> CList = new List<SelectListItem>();
            foreach (var item in CategoryList)
            {
                CList.Add(new SelectListItem { Text = item.CategoryName, Value = item.CategoryID.ToString() });
            }
            ViewBag.Categoryid = CList;
            
            return View();
        }





[HttpPost]
public ActionResult Create(Product product, HttpPostedFileBase file)
{
    try
    {
        // TODO: Add insert logic here
        product.Image = file.FileName;
        dbcontext.product.Add(product);
        dbcontext.SaveChanges();

       file.SaveAs(Server.MapPath("/Upload" + file.FileName));
        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}







мой взгляд

@using (Html.BeginForm("Create","Products",FormMethod.Post,new {enctype="multipart/form-data" }))




@Html.DropDownList("Categoryid",(IEnumerable<SelectListItem>)ViewBag.Categoryid, htmlAttributes: new { @class = "form-control" })

F-ES Sitecore

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

2 Ответов

Рейтинг:
2

Richard Deeming

Вы должны заселить ViewBag каждый раз, когда вы показываете вид. Самый простой вариант, вероятно, состоит в том, чтобы переместить код в отдельный метод.

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

Также помните, что некоторые браузеры отправляют полный путь клиента к загруженному файлу, а не только имя файла. Вы должны убедиться, что используете только часть имени файла.

private void PopulateLookups()
{
    var categoryList = dbcontext.category.ToList();
    var selectList = new List<SelectListItem>();
    foreach (var item in categoryList)
    {
        selectList.Add(new SelectListItem { Text = item.CategoryName, Value = item.CategoryID.ToString() });
    }
    ViewBag.Categoryid = selectList;
}

[HttpGet]
public ActionResult Create()
{
    PopulateLookups();
    return View();
}

[HttpPost]
public ActionResult Create(Product product, HttpPostedFileBase file)
{
    try
    {
        string fileName = System.IO.Path.GetFileName(file.FileName);
        string physicalPath = System.IO.Path.Combine(Server.MapPath("~/Upload/"), fileName);
        file.SaveAs(physicalPath);

        product.Image = fileName;
        dbcontext.product.Add(product);
        dbcontext.SaveChanges();
        
        return RedirectToAction("Index");    
    }
    catch (Exception ex)
    {
        ViewBag.Error = ex;
        PopulateLookups();
        return View();
    }
}
По мнению:
@if (ViewBag.Error != null)
{
    <p><b>Error:</b></p>
    <pre>@ViewBag.Error</pre>
}


Рейтинг:
1

ahmedbelal

Привет мистер Ричард Диминг приятно познакомиться
сообщение исчезло
но ошибка viewbag на моем экране есть
ОШИБКА:

System.NullReferenceException: ссылка на объект не установлена на экземпляр объекта.
в моем магазине.Контроллеры.ProductsController.Создайте(Product product, HttpPostedFileBase file) в C:\Users\W10\Desktop\MyShop\MyShop\Controllers\ProductsController.cs:line 62