Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
JokerKS
1 / 1 / 2
Регистрация: 25.09.2016
Сообщений: 12
1

Добавление элементов в List

11.12.2016, 13:54. Просмотров 399. Ответов 2
Метки нет (Все метки)

Есть такая модель
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Summary
    {
        [Key]
        public int SummaryID { get; set; }
        public byte[] Photo { get; set; }
        [Required]
        [MaxLength(25)]
        public string Name { get; set; }
        public virtual List<Education> Education { get; set; }
}
 public class Education
    {
        [Key]
        public int EducationID { get; set; }
        [Required]
        public DateTime StartDate { get; set; }
        public DateTime EndDate { get; set; }
        [Required]
        public string Name { get; set; }
        public virtual Summary Summary { get; set; }
}
И такая ViewModel
C#
1
2
3
4
5
6
public class SummaryViewModel
{
        
        public Summary Summary { get; set; }
        public List<Education> Education { get; set; }
}
Нужно создать View для Create при условии что List<Education> изначально не существует и нужно динамически добавлять в листу елементы

Пробывал так:
1. Создал частичное представление для листы
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
@model PersonalPage.Models.Education
 
@{
    Layout = null;
}
<h2>Education</h2>
 
@Html.HiddenFor(model=>model.EducationID)
<div class="form-group editorRow">
    @Html.LabelFor(model => model.StartDate)
    @Html.EditorFor(model => model.StartDate)
    @Html.ValidationMessageFor(model => model.StartDate)
    <br />
    @Html.LabelFor(model => model.EndDate)
    @Html.EditorFor(model => model.EndDate)
    @Html.ValidationMessageFor(model => model.EndDate)
    <br />
    @Html.LabelFor(model => model.Name)
    @Html.EditorFor(model => model.Name)
    @Html.ValidationMessageFor(model => model.Name)
    <br />
    @Html.LabelFor(model => model.Direction)
    @Html.EditorFor(model => model.Direction)
    @Html.ValidationMessageFor(model => model.Direction)
    <br />
    @Html.LabelFor(model => model.Speciality)
    @Html.EditorFor(model => model.Speciality)
    @Html.ValidationMessageFor(model => model.Speciality)
</div>
2. Моя Create View
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
@model PersonalPage.Models.SummaryViewModel
 
@{
    ViewBag.Title = "Create";
}
 
<h2>Create</h2>
 
@using (Html.BeginForm("FileUpload", "Summary", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()
 
    <div class="form-horizontal">
        <h4>Summary</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.Summary.Name, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Summary.Name, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Summary.Name, "", new { @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(model => model.Summary.Photo, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                <div class="col-md-4 file-btn">
                    <input type="file" name="file" id="file" class="btn btn-default btn-file" style="display: flex;" accept="image/jpeg,image/png">
                </div>
                <div class="col-md-8 image-div">
                    <span class="image-not-found">Image Not Found!</span>
                </div>
            </div>
        </div>
        <div class="form-group editorRows">
        </div>
        <div class="form-group">
            @Html.ActionLink("Add another...", "AddEducation", null, new { @class = "addItem" })
        </div>
 
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}
 
<div>
    @Html.ActionLink("Back to Summary", "Index")
</div>
 
@section Scripts {
    <script src="~/Scripts/jquery-3.1.1.min.js"></script>
    <script src="~/Scripts/WorkWithImage.js"></script>
    <script  type= text/javascript>
        $(".addItem").click(function() {
        $.ajax({
            url: this.href,
            cache: false,
            success: function(html) { $(".editorRows").append(html); }
        });
        return false;
        });
    </script>
}
3. Мой контролер
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
[HttpPost]
//Нажатие на кнопке Create
        public ActionResult FileUpload(SummaryViewModel model, HttpPostedFileBase file)
        {
            if (ModelState.IsValid)
            {
                if (file != null)
                {
                    using (MemoryStream ms = new MemoryStream())
                    {
                        file.InputStream.CopyTo(ms);
                        model.Summary.Photo = ms.GetBuffer();
                    }
                }
                db.Summary.Add(model.Summary);
                if (model.Education != null)
                    foreach (var item in model.Education)
                {
                    db.Education.Add(item);
                }
                db.SaveChanges();
 
                return RedirectToAction("Index");
            }
            return RedirectToAction("Create");
        }
 
//Нажатие на линк Add another...
        public ViewResult AddEducation(SummaryViewModel model)
        {
            if (model.Education == null)
                model.Education = new List<Education>();
            model.Education.Add(new Education());
            return View("~/Views/Summary/Editor Templates/Education.cshtml", model.Education.Last());
        }
Частичное представление добавляется, но уже когда я хочу записать все в базу в модели List<Education> = null
И не знаю что с этим делать, уже 2 день сижу над этой проблемой
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2016, 13:54
Ответы с готовыми решениями:

Добавление нового элемента List<> из представления
Добрый день! Подскажите пожалуйста, как провернуть одну вещь. В контроллере...

добавление элемента в LIst
Здравствуйте, возникла проблема с добавление элемента в List. Есть класс:...

Добавление элементов в DropDownList
По умолчанию стоит надпись Unbound. Как поменять её к примеру на слово СТРАНА

Добавление элементов в ListBox
Добрый день, подскажите пожалуйста дан ListBox &lt;asp:ListBox ID=&quot;ListBox1&quot;...

Добавление AJAX-элементов
Добавил 2 элемента на форму(Update panel и Script manager ). Выдаёт ошибку:Имя...

2
bodynar
170 / 170 / 93
Регистрация: 14.03.2015
Сообщений: 687
Записей в блоге: 1
Завершенные тесты: 3
11.12.2016, 15:32 2
Попробуйте проинспектировать сгенерированную страницу после добавления нескольких html-блоков, представляющих Education и выложите сюда.
0
lvlkoo
.NET C#,ASP.NET MVC
Эксперт .NET
533 / 459 / 208
Регистрация: 16.10.2010
Сообщений: 1,838
Завершенные тесты: 2
11.12.2016, 16:29 3
Так работаеть не будет! Для того чтобы контроллер разобрал лист, имена интпутов должны иметь индексатор, к примеру

.Education[index].EducationID

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

C#
1
2
3
4
5
6
7
8
public ViewResult AddEducation(SummaryViewModel model)
        {
            if (model.Education == null)
                model.Education = new List<Education>();
            model.Education.Add(new Education());
            ViewBag.EducationCount = model.Education.Count
            return View("~/Views/Summary/Editor Templates/Education.cshtml", model.Education.Last());
        }
Ну и именовать контролы уже с индексом

HTML5
1
2
3
.....
@Html.Hidden(".Education[@(ViewBag.EducationCount - 1)].EducationID", model.EducationID)
....
Ну и тд
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2016, 16:29

Динамическое добавление элементов формы
Есть что-то аля: &lt;asp:Table ID=&quot;myTable&quot; runat=&quot;server&quot; Width=&quot;100%&quot;&gt; ...

Динамическое добавление элементов управления на странице
Всем привет ситуация такая мне необходимо динамически подключить TreeView на...

Добавление существующих элементов препятствует успешной компиляции
подключаю &quot;мастер страниц&quot; и др страницы при помощи: - добавить существующие...


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

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

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