c# - asp下拉列表 bool 值总是设置为false?

标签 c# asp.net asp.net-mvc asp.net-core

这是我的观点

    <div class="form-group">
        <label asp-for="Product.InStock">Available:</label>
        <select class="form-control" id="Product.InStock">
            <option value="False">No</option>
            <option value="True">Yes</option>
        </select>
    </div>

这是模型 Product.cs

    [Required]
    [Display(Name = "Available")]
    public bool InStock { get; set; }

问题是发送到 Controller 方法的值总是 false,即使我选择选项"is"也是如此。

最佳答案

您没有为控件设置“名称”值,因此它永远不会回发。

在您的情况下,由于您使用的是 ASP.NET Core MVC,解决此问题的最佳方法是使用 asp-for选择中的标签助手,就像您对与模型的相同“Product.InStock”属性关联的标签和验证控件所做的一样。

<select class="form-control" asp-for="Product.InStock">

这样,ASP.NET 将在控件上生成正确的 id 和 name 属性,以便它在表单回发时绑定(bind)到您的模型。

当然如果你view的Model直接是Product (而不是一些 ViewModel,其中 Product 只是它的一个属性),然后所有你的 asp-forInStock相关的标签需要简单地 asp-for="InStock"相反。

参见 https://learn.microsoft.com/en-us/aspnet/core/mvc/views/working-with-forms#the-select-tag-helper有关 <select> 的标签助手的更多详细信息控制

附言如果您只是按照示例代码绑定(bind)到一个简单的 True/False bool 值,那么从可用性的角度来看,复选框可能是更合适的表单控件类型。然后用户只需单击一次即可设置值,而不是两次。

如果你想绑定(bind)到另一种类型,例如int 或 string,以便您可以为该字段拥有很多潜在值,并且您想要动态填充选项列表(例如,从数据库数据),您可以使用 asp-items帮助器标记告诉 ASP.NET 从服务器变量加载列表 - 详细信息和示例显示在上面链接的文档中。

关于c# - asp下拉列表 bool 值总是设置为false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49176126/

相关文章:

c# - 如何以编程方式将映射添加到 UnicastBusConfig?

c# - .ASP.NET Core 仅在 Controller 上存在策略时运行策略处理程序

c# - UserManager<User> 在数据库中找不到现有用户 asp.net core Identity

asp.net - ASP.Net 2.0/Ajax 工具包是实现 SEO 友好网站的正确技术吗

c# - 为什么不保留对 @Html.LabelFor 值的修改?

c# - 流利的 Nhibernate,处理一对多关系

c# - 解析无效的 XML C#

c# - 您可以更改 ASP.NET Core 项目中 launchSettings.json 的位置吗?

c# - 在 MVC 项目中使用 System.Device

c# - 此版本的 sql server 不允许用户实例登录标志。 SQL Server 2012 企业版