为什么数据库mvc razor中的下拉值始终为null

时间:2017-03-24 04:54:17

标签: asp.net-mvc asp.net-mvc-4 razor html.dropdownlistfor

我正在创建一个注册表单,下拉列表中有一个名为gender的字段。当我从性别下拉列表中选择男性或女性时,该值将始终为null并返回验证消息“男性或女性对该字段无效”

控制器

 [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Create([Bind(Include = "ID, FirstName,DOB,Gender")] AgentMaster agentMaster)
    {
        if (string.IsNullOrEmpty(Convert.ToString(agentMaster.Gender)))
        {
            ModelState.AddModelError("Gender", "Gender is required");
        }


        if (ModelState.IsValid)
        {
            db.AgentMasters.Add(agentMaster);
            await db.SaveChangesAsync();
            return RedirectToAction("Index");
        }

        return View(agentMaster);
    }

视图

@model A.Models.AgentMaster

 <div class="form-group">
        @Html.LabelFor(model => model.Gender, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">

            @Html.DropDownListFor(model => model.Gender, new SelectList(new[] { "Male", "Female" }),"--select--")
            @Html.ValidationMessageFor(model => model.Gender, "", new { @class = "text-danger" })
        </div>
    </div>
模型性别中的

public Nullable<short> Gender { get; set; }

当我使用断点调试代码时,[httppost]中的性别值为null,但是通过给出1或0它可以工作。所以我在控制器中使用验证转换为字符串,但它不起作用。我没有得到我需要改变的地方。谁能帮忙找到解决方案?

1 个答案:

答案 0 :(得分:0)

您生成<select>后发回string"Male""Female",无法绑定short

将属性更改为string,或者如果您确实需要short,则需要生成具有相应IEnumerable<SelectListItem>的{​​{1}},例如

Value

但是,将new List<SelectListItem>() { new SelectListItem() { Value = "0", Text = "Male" }, new SelectListItem() { Value = "1", Text = "Female" } }; 存储为数值是没有意义的,属性应该是字符串或枚举。