我正在创建一个注册表单,下拉列表中有一个名为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它可以工作。所以我在控制器中使用验证转换为字符串,但它不起作用。我没有得到我需要改变的地方。谁能帮忙找到解决方案?
答案 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" }
};
存储为数值是没有意义的,属性应该是字符串或枚举。