这是我的观点
<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-for
与InStock
相关的标签需要简单地 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/