none
MVC, работа с формой и передача в два разных контроллера для записи в бд (EF CF) RRS feed

  • Вопрос

  • Добрый день.

    Идея такая - 

    Есть форма, на ней хочу реализовать создание новой "новости" и сразу добавить "картинку" для этой новости. 

    CRUD для "новостей" есть в отдельном контроллере c использование EF CF, соответственно это отдельная таблица.

    Так же есть контроллер для картинок, есть CRUD с помощью EF CF, это тоже отдельная таблица.

    Через форму Создания новости хочу добавить информацию относительно самой новости и картинку.

    Каким образом передавать информацию из формы в контроллер двух разных моделей, а затем запись данных в разные таблицы.

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

    модель:

    	public partial class ImageFile
    	{
    	public int ImageId { get; set; }
    	public string AltText { get; set; }
    	public byte[] Image { get; set; }
    	public string MimeType { get; set; }
            public string Title { get; set; }
    	public string Filename { get; set; }
    	public string Url { get; set; }
            }
    
    	public partial class Post
    	{
            public int PostId { get; set; }
    	public string Title { get; set; }
    	public DateTime DateCreated { get; set; }
    	public string TextFull { get; set; }
    	public string TextSmallNews { get; set; }
    	public string TextGuideAnnounce { get; set; }
            public int? ImageNewsFullId { get; set; }
            public string Link { get; set; }
            public string Category { get; set; }
            public string Section { get; set; }
    /* на будущие для картинок в других материалах
            public int? ImagePreviewId { get; set; }
    	public int? ImageNewsFullId { get; set; }
    	public int? ImageItemBig1Id { get; set; }
    	public int? ImageItemBig2Id { get; set; }
    	public int? ImageItemBig3Id { get; set; }
    	public int? ImageItemBig4Id { get; set; }
    	public int? ImageItemSmallId { get; set; }
    на будущие для картинок в других материалах */
            }

    Контроллеры

    Первый, здесь заливаю картинку

    public ActionResult Imageupload(HttpPostedFileBase Upload, ImageFile imagefile, string AltText, string Url, string Title)
            {
                if (Upload != null && Upload.ContentLength > 0)
                    if (Upload.ContentType == "image/jpeg")
                    {
                        string mimeType = Upload.ContentType;
                        Stream fileStream = Upload.InputStream;
                        string fileName = Upload.FileName;
                        int fileLength = Upload.ContentLength;
                        byte[] fileData = new byte[fileLength];
                        fileStream.Read(fileData, 0, fileLength);
                        
                        //fileStream.Close();
                        //fileStream.Dispose();
                      
    
                        db.ImageFiles.Add(imagefile);
                        
                        db.SaveChanges();
                       
    
                        PostDBContext _db = new PostDBContext();
                        ImageFile _img = new ImageFile()
                        {
                            MimeType = mimeType,
                            Image = fileData,
                            Filename = fileName,
                            AltText = AltText,
                            Url = Url,
                            Title = Title
                        };
                        _db.ImageFiles.Add(_img);
                        _db.SaveChanges();
                        return RedirectToAction("Index");
    
    
                    }
                return View();
            }

    2 контроллер, здесь добавляю новость

    public ActionResult Create(Post Post, string Title, string TextFull, string TextSmallNews) { Post news = new Post(); { Title = AltText, TextFull = TextFull, TextSmallNews = TextSmallNews /// остальное }; db.ImageFiles.Add(news); db.SaveChanges(); return RedirectToAction("Index");

    }




    • Изменено SanteR_ 11 сентября 2013 г. 10:04 code
    11 сентября 2013 г. 9:37

Ответы

  • "Подскажите как реализовать" -  создаёте класс (DTO), который будет содержать все поля обеих моделей, и отправляете все данные одному контроллеру, а потом разбираете их, кто и какой модели принадлежит.

    Сделаем содержимое сообщества лучше, вместе!

    13 сентября 2013 г. 5:31
    Модератор

Все ответы

  • Передать две порции данных одним запросом на два контроллера не получится. Вы либо должны ограничиться одним, передав всё сразу или делать два запроса: данные картинки обычным POST, а остальное через AJAX.

    Сделаем содержимое сообщества лучше, вместе!

    11 сентября 2013 г. 13:06
    Модератор
  • Добрый день.

    Подскажите как реализовать "Вы либо должны ограничиться одним, передав всё сразу"

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

    Что бы на одной форме я заполнил данные для создания "Новости" - это одна модель

    и что бы ниже добавил картинки - это вторая модель

    И отправил это все одновременно.

    Спасибо.

    12 сентября 2013 г. 10:48
  • "Подскажите как реализовать" -  создаёте класс (DTO), который будет содержать все поля обеих моделей, и отправляете все данные одному контроллеру, а потом разбираете их, кто и какой модели принадлежит.

    Сделаем содержимое сообщества лучше, вместе!

    13 сентября 2013 г. 5:31
    Модератор