我正在使用一个Razor页面创建一个表单(我知道这可能不是一个好主意,但我想进行一些[不是那么]快速的原型设计。基本上,第一步是用户输入一堆数据,下一步是用户将上传一些文件。我的页面模型看起来像这样:
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
页面时,它确实是这样的。问题是,当页面发送回浏览器时,该值总是false
。 <input type="hidden" data-val="true" data-val-required="The FileUpload field is required." id="FileUpload" name="FileUpload" value="False" />
我做错了什么?
input
中添加value="@Model.FileUpload"
可以解决问题:<input asp-for="FileUpload" type="hidden" value="@Model.FileUpload"/>
。至于为什么没有它就不起作用:我猜可能是因为没有这个值。 - PajLe