asp.net core razor 页面复选框模型绑定(始终为 false)
Posted
技术标签:
【中文标题】asp.net core razor 页面复选框模型绑定(始终为 false)【英文标题】:asp.net core razor page checkboxes model binding (always false) 【发布时间】:2020-09-06 21:08:52 【问题描述】:我在 asp.net core 中有一个带有以下输入标签的剃须刀页面:
<input asp-for="chkPref" />
在我的代码隐藏中:
public bool chkPref get; set;
所以当我运行该应用程序时,我可以在Request.Form
中确认我正在...
复选框选中 = true,false
复选框未选中 = false
这是预期的,根据https://www.learnrazorpages.com/razor-pages/forms/checkboxes(这似乎是每个人都指向这个问题的答案的网站)
但是,该页面指出模型绑定会发现 true,false
实际上是 true
但无论如何我都会得到 false
。
上面的网站暗示了这种“刚刚发生”的事实......
如果复选框被选中,发布的值将为真,假。这 模型绑定器将从值中正确提取 true。否则它 会是假的。
但这似乎不起作用,或者至少它的工作原理并不那么明显。
首先我不确定如何将两个值(即 - true
、false
)分配给单个 bool
。
我什至尝试将其变成List<bool>
,但这也没有用。这会引发一组完全不同的错误。
【问题讨论】:
【参考方案1】:我相信查看Request.Form
可以为您提供原始表单数据。您可能想要的是利用表单活页夹:
您可以使用BindPropertyAttribute
标记属性,或者表明您希望这些特定属性作为OnPost
处理程序的参数(参见下面的示例)。
给定一个剃须刀页面
<form method="post">
<input asp-for="chkPref" />
@html.CheckBoxFor(model => model.chkPref2)
<button>Click</button>
</form>
您的代码隐藏可能如下所示:
public class IndexModel : PageModel
public bool chkPref get; set; // will not get bound
[BindProperty] // Binder needs to know which properties to work with
public bool chkPref2 get; set;
public void OnPost(bool chkPref)// PageActionInvoker will pass correct value as parameter
this.chkPref = chkPref;
【讨论】:
您回答的关键是添加缺少的[BindProperty]
。谢谢!以上是关于asp.net core razor 页面复选框模型绑定(始终为 false)的主要内容,如果未能解决你的问题,请参考以下文章
覆盖 asp.net core razor 页面中的 razor 视图
ASP.NET Core 2.1 Razor 页面返回带有模型的页面
Asp.net core razor pages 加载部分页面