【问题标题】:asp.net core razor page checkboxes model binding (always false)asp.net core razor 页面复选框模型绑定(始终为 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。否则它 会是假的。

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

首先我不确定如何将两个值(即 - truefalse)分配给单个 bool

我什至尝试将其变成List&lt;bool&gt;,但这也没有用。这会引发一组完全不同的错误。

【问题讨论】:

    标签: c# razor-pages


    【解决方案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]。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 2018-11-26
    • 2021-03-07
    • 1970-01-01
    • 2015-03-16
    相关资源
    最近更新 更多