.NET Core 5 Razor Pages单选框绑定bool变量及相关问题咨询
问题1:单选框与bool变量绑定可行性及错误修正
- 完全可以实现绑定,你遇到的报错和绑定失效是以下几个错误导致的:
[BindProperty]特性加错了位置:该特性只能修饰PageModel中的属性,不能直接加在实体类Logical的类声明上,你需要把它移到logicalModel类里的public Logical logical { get; set; }这行上方。- 你的属性类型不匹配:你现在
logicalAtrr是string类型,如果要绑定bool值,直接把它的类型改为bool即可。 - 单选框需要成对出现:你现在只写了一个值为true的单选框,要补充值为false的选项,否则用户没法选择false值;同时使用
asp-for绑定后不要手动写name属性,手动赋值的name会覆盖自动生成的绑定规则。
问题2:模型值输出到页面失效的原因
- 你用
@Model.logical输出的是Logical类的实例对象,默认会输出类的全限定名,不是属性值,你需要访问具体属性@Model.logical.logicalAtrr才能拿到对应的值。 - 另外你在
OnGet方法中没有初始化logical实例,页面加载时会触发空引用异常,必须在OnGet里给logical属性赋初始值。
修正后的实体类代码
public class Logical { // 改为bool类型适配单选框的true/false值 public bool logicalAtrr { get; set; } }
修正后的cshtml.cs后台代码
public class logicalModel : PageModel { // BindProperty加到PageModel的属性上 [BindProperty] public Logical logical { get; set; } public void OnGet() { // 初始化实例避免空引用 logical = new Logical(); // 可自定义初始值,比如默认选false logical.logicalAtrr = false; } // 表单提交触发的Post方法,可断点查看绑定值 public IActionResult OnPost() { return Page(); } }
修正后的cshtml前端代码
@page @model logicalModel <form method="post"> <div class="form-check"> <input class="form-check-input" type="radio" asp-for="logical.logicalAtrr" id="flexRadioDefault1" value="true"> <label class="form-check-label" for="flexRadioDefault1"> True </label> </div> <div class="form-check"> <input class="form-check-input" type="radio" asp-for="logical.logicalAtrr" id="flexRadioDefault2" value="false"> <label class="form-check-label" for="flexRadioDefault2"> False </label> </div> <button type="submit" class="btn btn-primary mt-2">提交</button> <!-- 访问具体属性输出值 --> <p class="mt-3">当前选中值:@Model.logical.logicalAtrr</p> </form>
内容的提问来源于stack exchange,提问作者Mateusz Klencz
相关产品推荐
相关产品推荐

