powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / LIst form View to Controller
10 сообщений из 10, страница 1 из 1
LIst form View to Controller
    #39079172
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
public class Customer
{
public String Name { get; set; }
public String Surname { get; set;}
public List <Address> { get; set;}
}


Из вью в Post Create Controller возвращается Address = 0

Подскажите пожалуйста в чем может быть причина.
...
Рейтинг: 0 / 0
LIst form View to Controller
    #39079174
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем GПодскажите пожалуйста в чем может быть причина.Вы где-то допустили ошибку, или ряд ошибок. Продемонстрируйте что-ли код представления.
...
Рейтинг: 0 / 0
LIst form View to Controller
    #39079178
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAАртем GПодскажите пожалуйста в чем может быть причина.Вы где-то допустили ошибку, или ряд ошибок. Продемонстрируйте что-ли код представления.

хм, во вью точно коллекция на месте. пробегаю циклом по ней.

А бинд(инклуд) обязателен в POST контроллерах?
...
Рейтинг: 0 / 0
LIst form View to Controller
    #39079209
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наверное лучше написать саму задачу.

В SQL 2 таблицы (Tasks & Environments) и связь много ко многим.
При создании Task на html вывожу Environments ввиде чекбоксов

В модель Tasks добавляю public IEnumerable(Of EnvironmentAvailableModel) EnvironmentsAvailable

Во вью она передается номрально и чекбоксы я вижу.
В POST контроллер приходит EnvironmentsAvailable = 0 , в ModelState вообще EnvironmentsAvailable отсутствует, иногда присутствует

Использую Automapper. Пробывал и без него.

4-5 дней уже пытаюсь получить результат ( гугл ни фига не помогает...
...
Рейтинг: 0 / 0
LIst form View to Controller
    #39079233
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем G,

выкладывай код вьюхи
...
Рейтинг: 0 / 0
LIst form View to Controller
    #39079347
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот база данных



Вот модель

Код: vbnet
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.
Imports System.ComponentModel
Imports System.ComponentModel.DataAnnotations
Imports System.ComponentModel.DataAnnotations.Schema

Public Class TaskCreateViewModel
    Public Sub New()
        Environments = New HashSet(Of EnvironmentModel)()
        EnvironmentsAvailable = New HashSet(Of EnvironmentAvailableModel)()
    End Sub
    Public Property Id As Long
    Public Property MilestoneId As Long
    <Required>
    <StringLength(250)>
    Public Property Title As String
    <Column(TypeName:="ntext")>
    Public Property Description As String
    Public Property WD As Byte
    Public Property SLA As Byte
    <DataType(DataType.Date)>
    <DisplayFormat(ApplyFormatInEditMode:=True, DataFormatString:="{0:yyyy-MM-dd}")>
    <DisplayName("Plannned end date")>
    <Required(ErrorMessage:="Plannned End Date can't be empty")>
    Public Property PlannedEndDate As Date
    <DataType(DataType.Time)>
    <DisplayFormat(ApplyFormatInEditMode:=True, DataFormatString:="{0:hh\:mm}")>
    <DisplayName("Plannned end time")>
    <Required(ErrorMessage:="Plannned End Time can't be empty")>
    Public Property PlannedEndTime As TimeSpan
    Public Overridable Property Environments As ICollection(Of EnvironmentModel)
    Public Overridable Property EnvironmentsAvailable As IEnumerable(Of EnvironmentAvailableModel)  [color=red]< ---- Вот то что хочу увидеть в контроллере POST[/color]
End Class

Public Class EnvironmentModel
    Public Property Id As Byte
    Public Property Name As String
End Class

Public Class EnvironmentAvailableModel
    Public Property Id As Byte
    Public Property Name As String
    Public Property IsSelected As Boolean
End Class



Вот контроллер Get

Код: vbnet
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.
        Function Create() As ActionResult

            Try

                Mapper.CreateMap(Of Task, TaskCreateViewModel)().ForMember(Function(dest) dest.EnvironmentsAvailable, Sub(opt) opt.Ignore())

                Mapper.CreateMap(Of Environment, EnvironmentAvailableModel)().ForMember(Function(dest) dest.IsSelected, Sub(opt) opt.Ignore())

                Dim sourceEnvironmentsAvailable As IEnumerable(Of Environment) = db.Environments.ToList

                Dim modelEnvironmentsAvailable As IEnumerable(Of EnvironmentAvailableModel) = Mapper.Map(Of IEnumerable(Of Environment), IList(Of EnvironmentAvailableModel))(sourceEnvironmentsAvailable)

                Dim model As TaskCreateViewModel = Mapper.Map(Of Task, TaskCreateViewModel)(New Task)
                model.EnvironmentsAvailable = modelEnvironmentsAvailable
                
                ViewBag.MilestoneId = New SelectList(db.Milestones, "Id", "Title")
                ViewBag.Id = New SelectList(db.PreviousTasks, "Id", "Id")

                Return View(model)

            Catch ex As Exception
                Return View("Error", New HandleErrorInfo(ex, "Tasks", "Create GET"))
            End Try

        End Function



Вот вьюха

Код: html
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.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
@ModelType TaskCreateViewModel 
@Code
    ViewData("Title") = "Create"
    Layout = "~/Views/Shared/_Layout.vbhtml"
End Code

<h2>Create</h2>

@Using (Html.BeginForm())
    @Html.AntiForgeryToken()

    @<div class="form-horizontal">
        <h4>Task</h4>
        <hr />
        @Html.ValidationSummary(True, "", New With {.class = "text-danger"})
        <div class="form-group">
            @Html.LabelFor(Function(model) model.MilestoneId, "MilestoneId", htmlAttributes:=New With {.class = "control-label col-md-2"})
            <div class="col-md-10">
                @Html.DropDownList("MilestoneId", Nothing, htmlAttributes:=New With {.class = "form-control"})
                @Html.ValidationMessageFor(Function(model) model.MilestoneId, "", New With {.class = "text-danger"})
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(Function(model) model.Title, htmlAttributes:=New With {.class = "control-label col-md-2"})
            <div class="col-md-10">
                @Html.EditorFor(Function(model) model.Title, New With {.htmlAttributes = New With {.class = "form-control"}})
                @Html.ValidationMessageFor(Function(model) model.Title, "", New With {.class = "text-danger"})
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(Function(model) model.Description, htmlAttributes:=New With {.class = "control-label col-md-2"})
            <div class="col-md-10">
                @Html.EditorFor(Function(model) model.Description, New With {.htmlAttributes = New With {.class = "form-control"}})
                @Html.ValidationMessageFor(Function(model) model.Description, "", New With {.class = "text-danger"})
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(Function(model) model.WD, htmlAttributes:=New With {.class = "control-label col-md-2"})
            <div class="col-md-10">
                @Html.EditorFor(Function(model) model.WD, New With {.htmlAttributes = New With {.class = "form-control"}})
                @Html.ValidationMessageFor(Function(model) model.WD, "", New With {.class = "text-danger"})
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(Function(model) model.SLA, htmlAttributes:=New With {.class = "control-label col-md-2"})
            <div class="col-md-10">
                @Html.EditorFor(Function(model) model.SLA, New With {.htmlAttributes = New With {.class = "form-control"}})
                @Html.ValidationMessageFor(Function(model) model.SLA, "", New With {.class = "text-danger"})
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(Function(model) model.PlannedEndDate, htmlAttributes:=New With {.class = "control-label col-md-2"})
            <div class="col-md-10">
                @Html.EditorFor(Function(model) model.PlannedEndDate, New With { .htmlAttributes = New With { .class = "form-control" } })
                @Html.ValidationMessageFor(Function(model) model.PlannedEndDate, "", New With { .class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(Function(model) model.PlannedEndTime, htmlAttributes:= New With { .class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(Function(model) model.PlannedEndTime, New With { .htmlAttributes = New With { .class = "form-control" } })
                @Html.ValidationMessageFor(Function(model) model.PlannedEndTime, "", New With { .class = "text-danger" })
            </div>
        </div>


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

        @For index As Byte = 0 To Model.EnvironmentsAvailable.Count - 1

        @<div Class="form-group">
                @Html.DisplayFor(Function(model) model.EnvironmentsAvailable(index).Name, New With {.htmlAttributes = New With {.Class = "control-label col-md-2"}})
            <div Class="col-md-10">
                <div Class="checkbox">
                    @Html.EditorFor(Function(model) model.EnvironmentsAvailable(index).IsSelected)
                    @Html.ValidationMessageFor(Function(model) model.EnvironmentsAvailable(index).IsSelected, "", New With {.class = "text-danger"})
                </div>
            </div>
        </div>

        Next


PS. Делал так

    @if Model.EnvironmentsAvailable.Count > 0 then
        @<div Class="form-group">
            @For index As Byte = 0 To Model.EnvironmentsAvailable.Count - 1
            @Html.HiddenFor(Function(model) model.EnvironmentsAvailable(index).Id)
            @Html.CheckBoxFor(Function(model) model.EnvironmentsAvailable(index).IsSelected)
            @Html.DisplayFor(Function(model) model.EnvironmentsAvailable(index).Name)
                Next
            </div>
    End If

PSS. Делал через For Each. 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  <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>
End Using

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@Section Scripts 
    @Scripts.Render("~/bundles/jqueryval")
End Section



Вот результат из вьюхе в контроллере POST


...
Рейтинг: 0 / 0
LIst form View to Controller
    #39079382
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем G,

трудно конечно читать VB.NET, но что увидел:

1. (это не относится к задаче, но всёже) Mapper.CreateMap должны вызываться один раз во всём приложении, при старте -- нельзя пихать их ни в один метод контроллера. обычно делают наследников AutoMapper.Profile, и там задают маппинг, а при старте через рефлекию собирают все такие типы и засовывают в инициализацию автомаппера. рекомендую так и сделать, настоятельно.

2. Public Overridable Property EnvironmentsAvailable As IEnumerable

— если ты хочешь двухсторонний биндинг, используй Array<>, или ICollection<> (но лучше Array<>), ведь IEnumerable — это интерфейс для передачи, но не возврата коллекции. и вообще IEnumerable не обязана быть коллекцией, а Array<> и ICollection<> — стопудовые коллекции. используй их.

хз как это всё трактуется в .NET, так как не работал с VB.NET, но см. пункт 2
...
Рейтинг: 0 / 0
LIst form View to Controller
    #39079400
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По 1 пункту в реальном приложении так и есть.
По 2 пункту Вы правы. Мой недочет.
...
Рейтинг: 0 / 0
LIst form View to Controller
    #39079447
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот что заметил ModelState не содержит списков. Поэтому в source не заполнены списке на скрине под спойлером.

Почему не содержит пока не понимаю (



...
Рейтинг: 0 / 0
LIst form View to Controller
    #39079745
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хехе,

вот эти 2 инструкции очень помогли ))

http://www.exceptionnotfound.net/simple-checkboxlist-in-asp-net-mvc/

YouTube Video
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / LIst form View to Controller
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]