我在asp.net核心中有一个带有以下输入标签的剃须刀页面:
<input asp-for="chkPref" />
在我后面的代码中:
public bool chkPref { get; set; }
因此,当我运行该应用程序时,我可以在Request.Form
中确认我正在...
已选中复选框= {true,false}
未选中复选框= {false}
这是预期的结果
但是,该页面指出模型绑定将指出{true,false}
实际上是true
,但是无论如何我都会得到false
。
上面的网站暗示了这种“恰好发生”的事实……
如果选中此复选框,则过帐值将为true,false。的 模型绑定器将从值中正确提取true。否则 将是错误的。
但这似乎不起作用,或者至少它的工作原理不是很明显。
我不确定如何首先将两个值(即-true
,false
)分配给单个bool
。
我什至尝试将其转换为List<bool>
,但这也不起作用。会引发完全不同的错误。
答案 0 :(得分: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;
}
}