我怎样才能在一个视图中使用选择列表中插入空值到一个可为空枚举财产?

问题描述 投票:0回答:1

我已经把我的枚举属性为可为空在我的模型,但是当我提出我的创作形式,我得到“值‘选择’是无效的productColor。”

我的模型:

  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值,但该模型状态无效的控制器,并与“价值‘选择视图返回’无效productColor。”

c# asp.net-core-mvc
1个回答
3
投票

加入空option标签更新您的value元素

<select asp-for="productColor" asp-items="@Html.GetEnumSelectList<color>()" class="form-control">
        <option value="">Select</option> <!-- notice value="" -->
</select>

如果没有value标记中指定的浏览器发送option的内部文本作为所选择的值。所以你的情况的浏览器发送Select值是不适合的控制器。此代码指示浏览器发送它成功地转换在ASP.NET中null空值。

© www.soinside.com 2019 - 2024. All rights reserved.