.NET Core 2.1 Страница бритвы ModelState IsValid false при публикации - PullRequest
0 голосов
/ 25 ноября 2018

У меня проблема с проверкой ModelState, из-за которой я не могу найти решение.У меня есть следующая страница загрузки:

[BindProperty]
public ApplicationLanguage UpdatedLanguage { get; set; }
[BindProperty]
public IList<ApplicationTranslation> ApplicationTranslations { get; set; }
public async Task<IActionResult> OnGetAsync(Guid id)
{
    if (ModelState.IsValid)
    {
        {
            UpdatedLanguage = await _languageService.FindByIdAsync(HttpContext, id);
            ApplicationTranslations = await _translationService.GetAllTranslationsAsync(UpdatedLanguage);
        }
    }
    return Page();
}

Это правильно заполняет следующую страницу:

<h4>@Model.UpdatedLanguage.Name</h4>
<hr />
<div class="container">
    <div class="form-group">
        <input asp-for="UpdatedLanguage.Id" hidden="hidden" />
    </div>
    <form method="post">
        <div class="row">
            @for (int i = 0; i < Model.ApplicationTranslations.Count; i = i + 2)
            {
                <div class="col-sm-3">
                    <label> @Model.ApplicationTranslations[i].Tag</label>
                </div>
                <div class="col-sm-3">
                    <div class="form-group">
                        <input asp-for="ApplicationTranslations[i].Translation" class="form-control" />
                        <span asp-validation-for="ApplicationTranslations[i].Translation" class="text-danger"></span>
                    </div>
                </div>

                <div class="col-sm-3">
                    @if (i + 1 < Model.ApplicationTranslations.Count)
                    {
                        <label> @Model.ApplicationTranslations[i + 1].Tag</label>
                    }
                </div>
                <div class="col-sm-3">
                    @if (i + 1 < Model.ApplicationTranslations.Count)
                    {
                        <div class="form-group">
                            <input asp-for="ApplicationTranslations[i+1].Translation" class="form-control" />
                            <span asp-validation-for="ApplicationTranslations[i+1].Translation" class="text-danger"></span>
                        </div>
                    }
                </div>
            }
        </div>
        <div class="row">
            <button type="submit" class="btn btn-default">@WebTranslator.Translate(HttpContext, "Save")</button>
        </div>
    </form>
</div>

Но когда я сохраняю форму, у меня недопустимый ModelState:

public async Task<IActionResult> OnPostAsync(ApplicationLanguage UpdatedLanguage, IList<ApplicationTranslation> ApplicationTranslations)
{
    if (!ModelState.IsValid)
    {
        return Page();
    }
 List<ApplicationTranslation> OriginalApplicationTranslations = (List<ApplicationTranslation>)(await _translationService.GetAllTranslationsAsync(UpdatedLanguage));
    foreach (ApplicationTranslation translation in ApplicationTranslations)
    {
        ApplicationTranslation originalTranslation = OriginalApplicationTranslations.Find(t => t.Tag == translation.Tag);
        IResult result = new ApplicationResult();
        if (result.Succeeded && originalTranslation.Translation != translation.Translation)
        {
            result = (await _translationService.UpdateAsync(HttpContext, translation));
        }
    }
return RedirectToPage("./Languages");
}

При debbugin я обнаружил, что в значениях ModelState значение ApplicationLanguage.Id допустимо, но недопустимы ApplicationLanguage.Name и все ApplicationTranslations, но я не знаю, почему.

...