asp.net核心剃须刀页面复选框模型绑定(始终为false)

时间:2020-05-20 13:20:42

标签: c# razor-pages

我在asp.net核心中有一个带有以下输入标签的剃须刀页面:

<input asp-for="chkPref" />

在我后面的代码中:

public bool chkPref { get; set; }

因此,当我运行该应用程序时,我可以在Request.Form中确认我正在...

已选中复选框= {true,false}

未选中复选框= {false}

根据{{​​3}}(可能是每个人都指向此问题的答案的网站),

这是预期的结果

但是,该页面指出模型绑定将指出{true,false}实际上是true,但是无论如何我都会得到false

上面的网站暗示了这种“恰好发生”的事实……

如果选中此复选框,则过帐值将为true,false。的 模型绑定器将从值中正确提取true。否则 将是错误的。

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

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

我什至尝试将其转换为List<bool>,但这也不起作用。会引发完全不同的错误。

1 个答案:

答案 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;
    }
}