Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Alex_student
18 / 18 / 8
Регистрация: 10.02.2013
Сообщений: 250
Завершенные тесты: 1
1

Сложности в передаче модели в контроллер

02.01.2014, 15:45. Просмотров 1073. Ответов 4
Метки нет (Все метки)

Доброго времени суток уважаемые форумчане!
Извиняюсь за ранее за возможно глупый вопрос, но ASP.NET учу достаточно недавно и только по книгам и возникает море вопросов. Вот один из них:
имеется БД (прин скрин) и прорабатываю вариант редактирования Игры в одной View. создаю отдельно модель и передаю во вью:
вот модель:
C#
1
2
3
4
5
6
7
8
 public class GameAdministrationModel
    {
        public Game Game { get; set; }
        public IEnumerable<LanguageGame> LangGame { get; set; }
        public IEnumerable<GameGenre> GenrGame { get; set; }
        public IEnumerable<Language> Languages { get; set; }
        public IEnumerable<Genre> Genres { get; set; } 
    }
и контроллер передающий во View:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 [HttpGet]
        public ActionResult EditeGame(int id)
        {
            var game = repositiry.Games
                                 .Include(p => p.Status)
                                 .FirstOrDefault(p => p.ID == id);
            SelectList status = new SelectList(repositiry.Status, "ID", "Name");
            ViewBag.Status = status;
            //РАЗОБРАТЬСЯ С ДРОПДАУНЛИСТ ВЗАИМОДЕЙСТВИЕ ЧЕРЕЗ ТАБЛИЦУ
//пробовал через выпадающий список но что-то не срабатывало выделение уже существующего значения:(
// решил пока через EditorFor топорно ну хоть как..
            //SelectList language = new SelectList(repositiry.Languages, "ID", "Name");
            //ViewBag.Language = language;
            //SelectList language = new SelectList(repositiry.LanguageGames, "ID", "GameID","LanguageID");
            //ViewBag.Language = language;
            //SelectList genre = new SelectList(repositiry.Genres, "ID", "Name");
            //ViewBag.Genre = genre;
             //List<Genre> genreList = new List<Genre>();
                //var genreGame = repositiry.GameGenreses
                //                          .Include(p => p.Genre)
                //                          .Where(p => p.GameID == game.ID)
                //                          .OrderBy(p => p.GenreID);
                //foreach (var genr in genreGame)
                //{
                //    var genreOne = repositiry.Genres
                //                             .FirstOrDefault(p => p.ID == genr.GenreID);
                //    genreList.Add(genreOne);
                //}
            var language = repositiry.Languages
                                     .OrderBy(p => p.Name)
                                     .ToList();
            var genre = repositiry.Genres
                                  .OrderBy(p => p.Name)
                                  .ToList();
            var gameGenre = repositiry.GameGenreses
                                      .Include(p => p.Genre)
                                      .Where(p => p.GameID == id)
                                      .OrderBy(p=>p.GenreID)
                                      .ToList();
            var gameLanguage = repositiry.LanguageGames
                                         .Include(p => p.Language)
                                         .Where(p => p.GameID == id)
                                         .OrderBy(p=>p.LanguageID)
                                         .ToList();
            var model = new GameAdministrationModel
                {
                    Game = game,
                    LangGame = gameLanguage,
                    GenrGame = gameGenre,
                    Languages = language,
                    Genres = genre
                };
            return View(model);
        }
вот сама вью:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
@using Domain.Model
@model WebIU.Models.AllGame.GameAdministrationModel
 
@{
    ViewBag.Title = "EditeGame";
    Layout = "~/Views/Shared/_AdminLayout.cshtml";
}
 
@using (Html.BeginForm())
{
    <div>
        @Html.HiddenFor(p=>p.Game.ID)
        <div>Название:</div>
        <div>@Html.EditorFor(p=>p.Game.Name)</div>
        
        <div>Статус:</div>
        <div>@Html.DropDownListFor(p=>p.Game.StatusID, ViewBag.Status as SelectList,"")</div>
        
        <div>Язык</div>
        @*  @foreach (var lang in Model.LangGame)
        {
            var l = new Language{ID=lang.Language.ID, Name = lang.Language.Name};
           <div> @Html.DropDownListFor(p=>lang.GameID, ViewBag.Language as SelectList,"")</div>
        }*@
      @foreach (var lang in Model.LangGame)
        {
            <div>@Html.EditorFor(p=>lang.LanguageID) @lang.Language.Name</div>
            @Html.HiddenFor(p=>lang.ID)
            @Html.HiddenFor(p=>lang.GameID)
        }
        <div>Языки внесенные в БД:</div>
        @foreach (var allLang in Model.Languages)
        {
            <div>ID: @allLang.ID   Название:@allLang.Name</div>
        }
        
        <div>Жанр:</div>
        @foreach (var gamegenr in Model.GenrGame)
        {
            <div>@Html.EditorFor(p => gamegenr.GenreID)  @gamegenr.Genre.Name</div>
            @Html.HiddenFor(p => gamegenr.ID)
            @Html.HiddenFor(p => gamegenr.GameID)
        }
        <div>Языки внесенные в БД:</div>
        @foreach (var allgenre in Model.Genres)
        {
            <div>ID: @allgenre.ID   Название:@allgenre.Name</div>
        }
 
        <div>Дата выпуска:</div>
        <div>@Html.EditorFor(p=>p.Game.DateRelis)</div>
        
        <div>Краткое описание:</div>
        <div>@Html.EditorFor(p=>p.Game.SmalNote)</div>
        
        <div>Полное описание:</div>
        <div>@Html.EditorFor(p=>p.Game.FulNote)</div>
        
        <br/>
        <div>Адрес видео:</div>
        <div>@Html.EditorFor(p=>p.Game.VideoYouTube)</div>
        @if (Model.Game.VideoYouTube == null)
        {
        }
        else
        {
            <div style="text-align: center; height: 315px; width: 560px; margin: 0px; margin-bottom: 20px; margin-top: 10px;">
                <object style="width: 100%; height: 315px;">
                    <iframe width="560" height="314" src="@Model.Game.VideoYouTube"></iframe>
                </object>
            </div>
        }
        <br/>
        <div>Изображение</div>
        <div>
            @if (Model.Game.ImageData == null)
            {
                <img src="~/Image/notFoto.jpg" style="width: 200px; height: 150px"/>
            }
            else
            {
                <img width="200" height="150" src="@Url.Action("GetImage","Game", new {Model.Game.ID})"/>
                @Html.HiddenFor(p => p.Game.ImageData)
                @Html.HiddenFor(p => p.Game.ImageType)
            }
            <div>Загрузить изображение:
                <input type="file" name="Image"/>
            </div>
        </div>
        @Html.HiddenFor(p=>p.Game.CategoriesID)
    </div>
    @Html.EditorForModel()
    <input type="submit" value="Сохранить"/>
}
вот вопросов пару:
1. при нажатии сохранить почему-то передается только класс Game модели. остальное даже не думает передаваться, а очень бы надо т.к. хочу вносить изменения в таблицы Game, GameGenre and LanguageGame.
2. может подскажите все-таки, что с DropDownList делать..что-то хоть убей не хочет выбирать имеющее значение( пришлось закоментить и пока иду по кривому пути
за ранее огромное спасибо
0
Миниатюры
Сложности в передаче модели в контроллер  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2014, 15:45
Ответы с готовыми решениями:

Обрезается значение при передаче в контроллер
Доброго времени суток,есть два метода в контроллере, которые принимают string id. public...

Баг или моя ошибка в передаче модели
Привет ребят.И вновь вопрос с передачей нужной модели. Нужен совет профи. Есть модель комментов,...

Как преобразовать DateTime при передаче из модели во вьюху?
Здравствуйте! Есть модель такого плана: m1 public DateTime DateTime { get; set; } public...

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

Передача в контроллер сложной модели
Добрый день, на странице имеются несколько текстбоксов и их данными нужно заполнить таблицу, как...

4
VladA4
50 / 50 / 7
Регистрация: 06.05.2013
Сообщений: 79
Записей в блоге: 1
02.01.2014, 19:16 2
1. при нажатии сохранить почему-то передается только класс Game модели. остальное даже не думает передаваться, а очень бы надо т.к. хочу вносить изменения в таблицы Game, GameGenre and LanguageGame.
Остальные и не будут, они же просто справочники. Зачем Вам изменения в Genre или Language , Вы же редактируете игру ?

2. может подскажите все-таки, что с DropDownList делать..что-то хоть убей не хочет выбирать имеющее значение( пришлось закоментить и пока иду по кривому пути
C#
1
 @Html.DropDownListFor(p=>p.Game.LangId, Model.LangGame,"Id","Name)</div>

Я бы посоветовал, Вам разделить Вашу View на мелкие , например грузить все Drop down по Ajax , тем самым упросить Action Edit , который вернут только данные по редактируемой Game, а данные для самих Drop Down можно получить уже по Ajax.
1
Alex_student
18 / 18 / 8
Регистрация: 10.02.2013
Сообщений: 250
Завершенные тесты: 1
04.01.2014, 00:29  [ТС] 3
была мысля разбить на мелкие...попробую) спасибо за помощь
к сожалению как я и говорил пока только учусь( и до ajax не дошел( если подскажите хорошую книгу буду примного благодарен
буду пробовать сейчас реализовать разбиение на мелкие формы

Добавлено через 4 часа 42 минуты
но разбивая по частям такое не юзабельное приложение получается(( может можно всетаки работать с полной моделью что я передаю во вью не используя примочек javascript или ajax)
0
VladA4
50 / 50 / 7
Регистрация: 06.05.2013
Сообщений: 79
Записей в блоге: 1
04.01.2014, 09:09 4
Сейчас Вы пишите всего лишь тестовый пример, а кода уже очень много, когда появятся дополнительные условия будет очень сложно поддерживать это решение.

Что касается Ajax, то в любом случаи, Вам рано или поздно надо будет сделать зависимые Drop Down ( Countries > Cities ) и предстоит изучать Jquery ajax. Через google можно найти тысячи статей о Jquery Ajax ( Post,Get, Load ), по этому тут каких то рекомендаций нету, скорей всего Вы попадете на одно из многих руководств на хабрахабре.


P.S. От себя могу предложить, инструмент, который мы используем для наших проектов ( видео )
1
Alex_student
18 / 18 / 8
Регистрация: 10.02.2013
Сообщений: 250
Завершенные тесты: 1
04.01.2014, 22:22  [ТС] 5
Огромное спасибо) буду пробовать)
0
04.01.2014, 22:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2014, 22:22

Передача данных из модели в контроллер
Добрый день. Разбираюсь с MVC вторую неделю, поэтому заранее прошу прощения, если мой вопрос...

Передача модели с вьювера в контроллер
Здравствуйте. столкнулся с проблемой передачи метода с вьюхи в контроллер. В примерах все пишут...

POST не возвращает данные из модели в контроллер
По примеру из книги Сандерсона делаю собственные формы, но наткнулся на проблему - в моей...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru