【发布时间】:2020-04-25 12:41:59
【问题描述】:
我正在使用一个剃须刀页面创建一个表单(我知道这可能不是一个好主意,但我正在尝试做一些 [不是那么] 快速原型设计。基本上,第一步是用户输入一个一堆数据,下一步就是用户上传一些文件。我的页面模型是这样的:
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" />
我做错了什么?
【问题讨论】:
-
你能显示表单的代码吗?
-
我已经为我的表单添加了代码。
-
根据this answer,将
value="@Model.FileUpload"添加到input可以解决问题:<input asp-for="FileUpload" type="hidden" value="@Model.FileUpload"/>。至于为什么没有它就不行:我猜它就是不行。 -
value="@Model.FileUpload" 不起作用。我得到了同样的结果。
标签: c# razor-pages asp.net-core-3.1