繁体   English   中英

asp.net 核心 razor 页面复选框 model 绑定(始终为假)

[英]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。 否则会是假的。

但这似乎不起作用,或者至少它的工作原理并不那么明显。

我不完全确定如何首先将两个值(即 - truefalse )分配给单个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM