none
There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'Type_e'. RRS feed

  • Вопрос

  • Подскажите что может быть.

    Итак у меня имееться следующий код

     

    Контроллер:

           
            public void AllSelect()
            {
                
                this.ViewData["Contry_list"] = new SelectList(db.GetAllContry(), "id_contry", "name_contry");
                this.ViewData["City"] = new SelectList(db.GetAllCity(), "id_city", "name_city");
                this.ViewData["Place"] = new SelectList(db.GetAllPlace(), "id_place", "name_pl");
                this.ViewData["Type_e"] = new SelectList(db.GetAllType(), "id_type", "name_type");
            }
    
     [HttpGet]
            public ActionResult Create_e()
            {
                AllSelect();
                          return View();
            }
            [HttpPost]
            public ActionResult Create_e(IEnumerable<HttpPostedFileBase> fileUpload, Events newEvents)
            {
                if (ModelState.IsValid)
                {
                    string path = AppDomain.CurrentDomain.BaseDirectory + "UploadedFiles/";
                    foreach (var file in fileUpload)
                    {
                        if (file == null) continue;
    
                        string filename = "posimg_" + (DateTime.Now.GetHashCode() * 2) + ".jpg";
                        if (filename != null) file.SaveAs(Path.Combine(path, filename));
                        
    
                        DBConnect1 c = new DBConnect1();
                        Events f = new Events();
                        Guid strana = new Guid(Request["strana"]);
                        Guid tip = new Guid(Request["Type_e"]);
                        Guid mesto = new Guid(Request["mesto"]);
                        Guid gorod = new Guid(Request["gorod"]);
                        f.type = tip;
                        f.contry_e = strana;
                        f.city_e = gorod;
                        f.place_e = mesto;
                        f.poster = filename;
    
    
                        c.AddToEvents(newEvents);
                        c.SaveChanges();
                        
                    }
                    return RedirectToAction("index");
                }
                else
                {
                    return View();
                }
            }
    

    Представление:

    Все показывать не буду только место занимать там только для Html.DropDownList меняються имена самого Html.DropDownList и имена ViewData

                <div class="editor-label">
                    @Html.LabelFor(model => model.type)
                </div>
                <div class="editor-field">
                    @Html.DropDownList("Type_e", (IEnumerable<SelectListItem>)ViewData["Type_e"])
                   
                </div>
    

    Что самое интересное я точно также сделал для формы редактирования и там у меня все работает.

     

    22 декабря 2011 г. 14:30

Ответы

  • Ошибка была следующей. При создании формы я, уставший от тестового заполнения форм, набирал в поля дата и время просто цифры, чтоб оно не орало мне что должны быть правильные значения, в итоге когда я ввел нормально данные оно и показало мне то что нужно... Так что как говориться САМ ЛОХ 8)
    Но проблема другая всплыла. теперь это: Не удалось вставить значение NULL в столбец "poster"...
    Почему то он не может загрузить изображение 8(

     Собственно в представении такой код

     

    @using (Html.BeginForm("Create_e", "Main", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
    ...
    <div class="editor-field">
    <p>
    <input type="file" name="fileUpload" /><br />
    </p>
    </div>
    <p>
    <input type="submit" value="Save" />
    </p>
    
    ...
    

    Ну а сам код контроллера представлен выше, не хочу мусорить в теме. Как то можно проследить на каком этапе не срабатывает код?

     


    • Помечено в качестве ответа ZEONE 23 декабря 2011 г. 9:07
    • Изменено ZEONE 23 декабря 2011 г. 9:31
    23 декабря 2011 г. 9:07
  • се разобрался со своей ошибкой. Проблема была в том что я по неопытности пытался делать запись в бд из 2- разных источников. А именно
    Я получал основные данные через newEvents который передавался из представления и отдельно я пытался записать значения из DropDownList примено таким образом:

    DBConnect1 c = new DBConnect1();
    Events f = new Events();
    Guid tip = new Guid(Request["Type_e"]);
    f.type = tip;
    

     

     

    Вот как на самом деле нужно было сделать:

    [HttpPost]
    public ActionResult Create_e(IEnumerable<HttpPostedFileBase> fileUpload, Events newEvents)
    {
    if (ModelState.IsValid)
    {
    string path = AppDomain.CurrentDomain.BaseDirectory + "/Content/images/Downloaded";
    foreach (var file in fileUpload)
    {
    if (file == null) continue;
    string filename = "posimg_" + (DateTime.Now.GetHashCode() * 2) + ".jpg";
    if (filename != null) file.SaveAs(Path.Combine(path, filename));
    //Подключаемся к базе данных
    DBConnect1 c = new DBConnect1();
    //преобразовуем значния из string в Guid
    Guid strana = new Guid(Request["strana"]);
    Guid tip = new Guid(Request["Type_e"]);
    Guid mesto = new Guid(Request["mesto"]);
    Guid gorod = new Guid(Request["gorod"]);
    //Присваиваем значения к запросу
    newEvents.type = tip;
    newEvents.contry_e = strana;
    newEvents.city_e = gorod;
    newEvents.place_e = mesto;
    newEvents.poster = filename;
    //добавляем данные
    c.AddToEvents(newEvents);
    //сохраняем бд 
    c.SaveChanges();
    }
     
    
    return RedirectToAction("index");
    }
    else
    {
    // return RedirectToAction("index");
    return View();
    }
    }
    


    • Помечено в качестве ответа ZEONE 24 декабря 2011 г. 12:56
    24 декабря 2011 г. 12:56

Все ответы

  • "(IEnumerable)ViewData["Type_e"])" - похоже неудачное приведение типов, а что за типы SelectListItem и SelectList?
    22 декабря 2011 г. 17:49
    Модератор
  • Ошибка была следующей. При создании формы я, уставший от тестового заполнения форм, набирал в поля дата и время просто цифры, чтоб оно не орало мне что должны быть правильные значения, в итоге когда я ввел нормально данные оно и показало мне то что нужно... Так что как говориться САМ ЛОХ 8)
    Но проблема другая всплыла. теперь это: Не удалось вставить значение NULL в столбец "poster"...
    Почему то он не может загрузить изображение 8(

     Собственно в представении такой код

     

    @using (Html.BeginForm("Create_e", "Main", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
    ...
    <div class="editor-field">
    <p>
    <input type="file" name="fileUpload" /><br />
    </p>
    </div>
    <p>
    <input type="submit" value="Save" />
    </p>
    
    ...
    

    Ну а сам код контроллера представлен выше, не хочу мусорить в теме. Как то можно проследить на каком этапе не срабатывает код?

     


    • Помечено в качестве ответа ZEONE 23 декабря 2011 г. 9:07
    • Изменено ZEONE 23 декабря 2011 г. 9:31
    23 декабря 2011 г. 9:07
  • се разобрался со своей ошибкой. Проблема была в том что я по неопытности пытался делать запись в бд из 2- разных источников. А именно
    Я получал основные данные через newEvents который передавался из представления и отдельно я пытался записать значения из DropDownList примено таким образом:

    DBConnect1 c = new DBConnect1();
    Events f = new Events();
    Guid tip = new Guid(Request["Type_e"]);
    f.type = tip;
    

     

     

    Вот как на самом деле нужно было сделать:

    [HttpPost]
    public ActionResult Create_e(IEnumerable<HttpPostedFileBase> fileUpload, Events newEvents)
    {
    if (ModelState.IsValid)
    {
    string path = AppDomain.CurrentDomain.BaseDirectory + "/Content/images/Downloaded";
    foreach (var file in fileUpload)
    {
    if (file == null) continue;
    string filename = "posimg_" + (DateTime.Now.GetHashCode() * 2) + ".jpg";
    if (filename != null) file.SaveAs(Path.Combine(path, filename));
    //Подключаемся к базе данных
    DBConnect1 c = new DBConnect1();
    //преобразовуем значния из string в Guid
    Guid strana = new Guid(Request["strana"]);
    Guid tip = new Guid(Request["Type_e"]);
    Guid mesto = new Guid(Request["mesto"]);
    Guid gorod = new Guid(Request["gorod"]);
    //Присваиваем значения к запросу
    newEvents.type = tip;
    newEvents.contry_e = strana;
    newEvents.city_e = gorod;
    newEvents.place_e = mesto;
    newEvents.poster = filename;
    //добавляем данные
    c.AddToEvents(newEvents);
    //сохраняем бд 
    c.SaveChanges();
    }
     
    
    return RedirectToAction("index");
    }
    else
    {
    // return RedirectToAction("index");
    return View();
    }
    }
    


    • Помечено в качестве ответа ZEONE 24 декабря 2011 г. 12:56
    24 декабря 2011 г. 12:56