Я создаю форму, используя одну страницу бритвы (я знаю, что это может быть не очень хорошая идея, но я пытаюсь сделать несколько [не очень] быстрых прототипов. По сути, первый шаг заключается в том, что пользователь вводит куча данных, и следующим шагом будет загрузка пользователем некоторых файлов. Моя модель страницы выглядит следующим образом:
public class CreateModel : PageModel
{
private readonly DefaultDbContext _context;
public CreateModel(DefaultDbContext context)
{
_context = context;
}
public async Task<IActionResult> OnGet(Guid id)
{
FileUpload = false;
return Page();
}
[BindProperty]
public bool FileUpload { get; set; } // Stored in a hidden field in my cshtml
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see https://aka.ms/RazorPagesCRUD.
public async Task<IActionResult> OnPostAsync()
{
FileUpload = true; // Hidden field is always false
return Page();
}
}
Вот как выглядит моя форма:
<form method="post" enctype="multipart/form-data">
<input type="hidden" asp-for="FileUpload" />
@if (!Model.FileUpload)
{
// Do some stuff
}
else
{
<div class="form-group">
<label asp-for="Upload" class="control-label"></label>
<input type="file" asp-for="Upload" multiple />
<span asp-validation-for="Upload" class="text-danger"></span>
</div>
}
<div class="form-group">
@if (Model.FileUpload)
{
<input type="submit" value="Finished" class="btn btn-primary" />
}
else
{
<input type="submit" value="Next" class="btn btn-primary" />
}
</div>
</form>
Когда я нажимаю «отправить» в первый раз, я ожидаю, что FileUpload
будет true
, что происходит при переходе по странице .cshtml
в отладчике. Проблема заключается в том, что когда страница отправляется обратно в браузер, значение всегда ложно:
<input type="hidden" data-val="true" data-val-required="The FileUpload field is required." id="FileUpload" name="FileUpload" value="False" />
Что я делаю не так?