Отправить обратно объект, который содержит несколько объектов от представления к контроллеру - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть модель, которая содержит информацию для входа пользователя, его задачи на этой и следующей неделе:

    public class TaskThisAndNextWeek
    {
        public TaskThisAndNextWeek()
        {

        }
        public UserLoginInfo Info { get; set; }
        public List<TaskInThisWeek> TaskThisWeek { get; set; }
        public List<TaskInNextWeek> TaskNextWeek { get; set; }
        public void SetData(UserLoginInfo Info, List<TaskInThisWeek> TaskThisWeek, List<TaskInNextWeek> TaskNextWeek)
        {
            this.Info = Info;
            this.TaskThisWeek = TaskThisWeek;
            this.TaskNextWeek = TaskNextWeek;
        }
    }

И я отправляю модель в виде, подобном этому, в контроллере UserRountineController.cs

public ActionResult ShowTask()
{
    //some input data to lists and object inside class TaskThisAndNextWeek
    return View(TaskThisAndNextWeek);
}

И HttpPost, как показано ниже

        [HttpPost]
    public void UpdateDetail(TaskThisAndNextWeek obj)
    {

        foreach (var item in obj.TaskThisWeek)
        {
            System.Diagnostics.Debug.WriteLine(item.JobID);
        }
    }

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

@model UserTaskReport.Models.TaskThisAndNextWeek
@using (Html.BeginForm("UpdateDetail", "UserRountine"))
{
    @Html.AntiForgeryToken()
    .....
    for (int i= 0;i<Model.TaskThisWeek.Count() ;i++)
    {
        <tr class="@(Model.TaskThisWeek[i].isApproved==1?"Company":"")">
        <td class="none">@Html.TextBoxFor(m=>m.TaskThisWeek[i].JobID)</td>
        <td class="none">@Html.TextBoxFor(m => m.TaskThisWeek[i].Unknown1)</td>
        <td class="none">@Html.TextBoxFor(m => m.TaskThisWeek[i].Unknown2)</td>
        <td align="center">@Html.TextBoxFor(m => m.TaskThisWeek[i].IniMonth)</td>
        <td>@Html.TextBoxFor(m => m.TaskThisWeek[i].userSName)</td>
        <td>@Html.TextBoxFor(m => m.TaskThisWeek[i].Title)</td>
        <td align="right">@Html.TextBoxFor(m => m.TaskThisWeek[i].lastWeekPercent)</td>
        <td align="right">
            @Html.TextBoxFor(m => m.TaskThisWeek[i].thisWeekPercent)
            @*<input name="thisWeekPercent" type="text" value="@Html.TextBoxFor(m => m.TaskThisWeek[i].thisWeekPercent)" id="" style="text-align: right;">*@
        </td>
        <td>
            @Html.TextBoxFor(m => m.TaskThisWeek[i].thisWeekContent)
            @*<input name="thisWeekContent" type="text" id="" value="@item.thisWeekContent">*@
        </td>
    } 
    .......
    <input type="submit" name="" value="Execute" id="">
}

Когда я запускаю программу, представление показывает ожидаемую информацию, но когда я изменяю и отправляю. Ошибка скинула сказал

Для этого объекта не определен конструктор без параметров.

Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Я попытался изменить List <> на ENumberable в модели, для -> foreach в поле зрения даже изменить @ Html.TextBox, но все так же. Пожалуйста, помогите мне с этим делом.

P / S: Я упаковал UserInfo в модель и отправил ее для просмотра для дальнейшей цели, такой как поиск по ID ... Но я думаю, что это небезопасно. Есть ли другой способ сделать это без отправки UserInfo?

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