gpt4 book ai didi

c# - ASP Core Razor 页面在发布时更改 BindProperty 值

转载 作者:行者123 更新时间:2023-12-05 06:21:44 32 4
gpt4 key购买 nike

我正在使用一个 Razor 页面创建一个表单(我知道这可能不是一个好主意,但我正在尝试做一些[不那么]快速原型(prototype)制作。基本上,第一步是用户输入一堆数据,下一步是用户上传一些文件。我的页面模型如下所示:

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>

当我第一次点击提交时,我希望 FileUploadtrue,当我单步执行 .cshtml 时调试器中的页面。问题在于,当页面被发送回浏览器时,该值始终为 false:

        <input type="hidden" data-val="true" data-val-required="The FileUpload field is required." id="FileUpload" name="FileUpload" value="False" />

我做错了什么?

最佳答案

需要解决一些问题:

  1. <input type="hidden">元素只有在您尝试发送信息(包含在这些元素中)时才有用 FROM page TO model,反之亦然。
  2. [BindProperty]当您尝试将某些信息 页面 模型 的属性时,使用属性,而不是反之亦然:

    Model Binding in Razor Pages is the process that takes values from HTTP requests and maps them to [...] PageModel properties. Model Binding

  3. 在行 @if (Model.FileUpload) ,您没有从页面的隐藏 input 中提取任何信息元素,而是来自模型 本身。您的代码应该按原样工作(如果您忽略隐藏的 input 元素)。

也就是说,您可以完全删除隐藏的 input (和 [BindProperty] 属性,因为在删除 FileUpload 后,没有任何东西可以绑定(bind)到 input ),你应该可以开始了。

但是,如果您希望更改隐藏的 input相应的值(value),你可以通过几种方式做到这一点:

  • 删除 [BindProperty]来自 FileUpload并保持其他一切不变。
  • 保留 [BindProperty] ,但呈现更改后的 FileUpload值:

    <input type="hidden" asp-for="FileUpload" value="@Model.FileUpload"/>

关于c# - ASP Core Razor 页面在发布时更改 BindProperty 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59638061/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com