Модель не указана при отправке обратно в ASP. NET MVC - PullRequest
1 голос
/ 13 июля 2020

Я пытаюсь сгенерировать список флажков и опубликовать выбранный элемент для публикации метода моего контроллера, но моя модель представления нулевая.

См. Ниже код и справку.

просмотреть получить вызов с помощью следующей кнопки на другой странице -

<button class="btn btn-primary" id="historicalrecords"  
        onclick="location.href='@Url.Action("HistoricalWorkSubmissions", "Main", new {id= @Model.MessageIdsCombined.FirstOrDefault()})'">View Historical Works</button>

Модель WorkSubmissions.cs:

public class HistoricalWorkSubmission
{
    public string Society { get; set; }
    public string Rsa { get; set; }
    public DateTime ProcessingTime { get; set; }
    public bool isSelected { get; set; }

}

public class HistoricalWorkSubmisssionViewModel
{
    public List<HistoricalWorkSubmission> Submissions { get; set; }
}

Получить метод в MainController:

[HttpGet]
public async Task<ActionResult> HistoricalWorkSubmissions(string id)
{
    WorkSearchViewModel workSearchViewModel = new WorkSearchViewModel
            {
                MessageId = id
            };

    var workSubmissions = await _swvManager.SearchAllWorkSubmissionsAsync(workSearchViewModel).ConfigureAwait(true);

    return View("~/Views/Main/HistoricalWorkSubmissions.cshtml", workSubmissions);
}

HistoricalWorkSubmissions.cshtml:

 @model SWV.WorkPicture.UI.Models.HistoricalWorkSubmisssionViewModel

@{
    ViewBag.Title = "HistoricalSubmissions";
}

<h2>HistoricalSubmissions</h2>
@using (Html.BeginForm("HistoricalWorkSubmissions", "Main", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken();
    <fieldset>
        <div>
            <table class="table-bordered">
                @*@foreach (var submission in Model.Submissions)*@
                @for (int i=0; i < Model.Submissions.Count(); i++)
                {
                    var bmiWorks = Model.Submissions[i].Society + Model.Submissions[i].Rsa + "   " + Model.Submissions[i].ProcessingTime;
                    <tr>
                        <td>
                            @Html.CheckBoxFor(m => Model.Submissions[i].isSelected)
                            @Html.Label(bmiWorks)
                            @Html.HiddenFor(m => Model.Submissions[i])

                        </td>
                    </tr>
                }
            </table>
            <input class="button btn-primary" type="submit" value="Save"/>
        </div>
    </fieldset>
}

И, наконец, метод публикации:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> HistoricalWorkSubmissions(HistoricalWorkSubmisssionViewModel workSubmissions)
{
    WorkSearchViewModel workSearchViewModel = new WorkSearchViewModel();
    workSearchViewModel.SwvId = "5124cfb4-afe8-4783-ab97-b9fbaaf6737d";

    var workPicturesx = await _swvManager.SearchAllWorkSubmissionsAsync(workSearchViewModel).ConfigureAwait(true);
           
    return View("~/Views/Main/HistoricalWorks.cshtml");
}

POST- Почта

Значение abc в отладчике равно нулю. Пожалуйста, помогите.

1 Ответ

0 голосов
/ 13 июля 2020

Убедитесь, что имена полей в сообщении соответствуют модели. Метка не является проблемой, но CheckBoxFor и HiddenFor будут генерировать теги Html input в форме, отправленной на сервер.

@Html.CheckBoxFor(m => Model.Submissions[i].isSelected)
@Html.Label(bmiWorks)
@Html.HiddenFor(m => Model.Submissions[i].Society)
@Html.HiddenFor(m => Model.Submissions[i].Rsa)
@Html.HiddenFor(m => Model.Submissions[i].ProcessingTime)   

Также я удалил скрытое поле для submission, потому что это объект в вашей модели, а вместо этого нам нужно сгенерировать теги для каждого свойства.

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