ASP.NET MVC2 Edit действие добавляет новую запись в базу данных - PullRequest
0 голосов
/ 16 августа 2010

Доброе утро, я изучаю MVC, используя примеры музыкального магазина на странице www.asp.net/mvc, и у меня возникла проблема с моим действием редактирования, добавляющим новую запись в базу данных вместо обновления существующей записи,Вот мое действие Изменить и Редактирование HTTPPost.

//
        // GET: /HomeScroller/Edit/5

        public ActionResult Edit(int id)
        {
            var viewModel = new HomeScrollerViewModel()
            {
                ScrollerLink = dataContext.ScrollerLinks.Single(s => s.SlideID == id)
            };

            return View(viewModel);
        }

        //
        // POST: /HomeScroller/Edit/5

        [HttpPost]
        public ActionResult Edit(int id, FormCollection formValues)
        {
            var scrollerLink = dataContext.ScrollerLinks.Single(s => s.SlideID == id);

            try
            {
                UpdateModel(scrollerLink, "ScrollerLink");
                dataContext.SubmitChanges();

                return RedirectToAction("Index");
            }
            catch(Exception ex)
            {
                var viewModel = new HomeScrollerViewModel()
                {
                    ScrollerLink = scrollerLink,
                    HasError = true,
                    ErrorMessage = ex.Message
                };

                return View(viewModel);
            }
        }

Чтобы немного больше узнать о том, что я делаю, у меня есть общий шаблон для моих просмотров Edit / Create, а в этом общем шаблоне у меня есть всплывающее окно jQuery с формой для загрузки изображения,Этот «HomeScroller» воспроизводит слайд-шоу на домашней странице, и я сделал бэк-энд для администратора, чтобы войти и создавать новые слайды, редактировать и удалять их.Другая проблема, с которой я сталкиваюсь, заключается в том, что когда я загружаю изображение с помощью этой второй формы, основная форма очищается на обратной стороне сообщения.Как мне сохранить данные в этих полях?Спасибо.

РЕДАКТИРОВАТЬ: Вот код для моего действия обновления

        [HttpPost]
        public ActionResult Upload(HttpPostedFileBase file, FormCollection formValues)
        {
            HomeScrollerViewModel viewModel;
            Regex imageFilenameRegex = new Regex(@"(.*?)\.(jpg|jpeg|png|gif)$");
            if (file.ContentLength > 0)
            {
                if (!imageFilenameRegex.IsMatch(file.FileName))
                {
                    viewModel = new HomeScrollerViewModel()
                    {
                        ScrollerLink = new ScrollerLink(),
                        HasError = true,
                        ErrorMessage = "Image must be .jpg, .jpeg, .png, or .gif"
                    };
                }
                else
                {
                    string filePath = Path.Combine(HttpContext.Server.MapPath("../Uploads"), Path.GetFileName(file.FileName));
                    file.SaveAs(filePath);
                    viewModel = new HomeScrollerViewModel()
                    {
                        ScrollerLink = new ScrollerLink()
                        {
                            ImageUrl = "../Uploads/" + file.FileName

                        }
                    };

                    return View("Create", viewModel);
                }
            }
            else
            {
                viewModel = new HomeScrollerViewModel()
                {
                    //ScrollerLink = scrollerLink,
                    HasError = true,
                    ErrorMessage = "Image is empty!? Try Again"
                };
            }
            return View("Create");
        }

1 Ответ

0 голосов
/ 18 августа 2010

Я чувствую себя отсталым за это.В своем действии обновления я возвращаюсь к представлению «Создать», что неправильно, если я работаю с представлением «Редактировать», именно поэтому он добавляет новый объект вместо изменения существующего.Кроме того - я сохранил свою модель представления с использованием TempData ["HomeScrollerViewModel"] и передал мои данные таким образом.Проблема решена.

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