C# 如何使用视图中的选择列表将null值插入到可为null的枚举属性中?
我已在模型中将enum属性设置为可为Null,但在提交创建表单时,我得到的“值”Select“对productColor无效。” 我的模型:C# 如何使用视图中的选择列表将null值插入到可为null的枚举属性中?,c#,asp.net-core-mvc,C#,Asp.net Core Mvc,我已在模型中将enum属性设置为可为Null,但在提交创建表单时,我得到的“值”Select“对productColor无效。” 我的模型: public class product { public int productId { get; set; } public string productName { get; set; } public color? productColor { get; set; } }
public class product
{
public int productId { get; set; }
public string productName { get; set; }
public color? productColor { get; set; }
}
public enum color
{
Red, Green, Blue
}
我的创建视图:
<div class="form-group">
<label asp-for="productColor" class="control-label"></label>
<select asp-for="productColor" asp-items="@Html.GetEnumSelectList<color>()" class="form-control">
<option>Select</option>
</select>
<span asp-validation-for="productColor" class="text-danger"></span>
</div>
我的控制器:
public async Task<IActionResult> Create([Bind("productId,productName,productColor")] product product)
{
if (ModelState.IsValid)
{
_context.Add(product);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(product);
}
结果:
表单似乎为productColor值设置了null,但模型状态在控制器上无效,视图返回“值”Select“对productColor无效”。通过添加空值标记更新选项元素
如果没有指定的值标记,浏览器会将选项的内部文本作为选定值发送。所以,在您的情况下,浏览器发送不适合控制器的选择值。此代码指示浏览器发送空值,该值在ASP.NET中成功转换为null。通过添加空值标记更新选项元素
如果没有指定的值标记,浏览器会将选项的内部文本作为选定值发送。所以,在您的情况下,浏览器发送不适合控制器的选择值。此代码指示浏览器在ASP.NET中成功地转换为NULL的空值。可能的副本可能考虑不适用或不枚举值,而不是试图不选择可能的副本,可以考虑不适用或不枚举值,而不尝试不做选择。
<select asp-for="productColor" asp-items="@Html.GetEnumSelectList<color>()" class="form-control">
<option value="">Select</option> <!-- notice value="" -->
</select>