![](/img/trans.png)
[英]Razor Checkboxes always return false in ASP.Net Core 2.2 MVC
[英]asp.net core razor page checkboxes model binding (always false)
我在 asp.net 内核中有一个 razor 页面,带有以下输入标签:
<input asp-for="chkPref" />
在代码隐藏中我有:
public bool chkPref { get; set; }
所以当我运行应用程序时,我可以在Request.Form
中确认我得到了......
复选框选中 = {true,false}
复选框未选中 = {false}
这是预期的,根据https://www.learnrazorpages.com/razor-pages/forms/checkboxes (这似乎是每个人都指向这个问题的答案的网站)
但是,该页面指出 model 绑定会发现{true,false}
实际上是true
,但无论如何我都会变得false
。
上面的网站暗示了这种“刚刚发生”的事实......
如果选中该复选框,则发布的值将为真,假。 model binder 将从值中正确提取 true。 否则会是假的。
但这似乎不起作用,或者至少它的工作原理并不那么明显。
我不完全确定如何首先将两个值(即 - true
, false
)分配给单个bool
。
我什至尝试将它变成List<bool>
但这也不起作用。 这会引发一组完全不同的错误。
我相信查看Request.Form
可以为您提供原始表单数据。 您可能想要的是利用表单活页夹:
您可以使用BindPropertyAttribute
标记属性,或者指示您希望这些特定属性作为OnPost
处理程序的参数(参见下面的示例)。
给定一个 razor 页面
<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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.