Asp.net mvc 为什么数据库mvc中的下拉值总是空的

Asp.net mvc 为什么数据库mvc中的下拉值总是空的,asp.net-mvc,asp.net-mvc-4,razor,html.dropdownlistfor,Asp.net Mvc,Asp.net Mvc 4,Razor,Html.dropdownlistfor,我正在创建一个注册表,下拉列表中有一个名为“性别”的字段。当我从性别下拉列表中选择男性或女性时,该值将始终为空,并返回验证消息“男性或女性对该字段无效” 控制器 [HttpPost] [ValidateAntiForgeryToken] public async Task<ActionResult> Create([Bind(Include = "ID, FirstName,DOB,Gender")] AgentMaster agentMaster) {

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

控制器

 [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);
    }
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务创建([Bind(Include=“ID,FirstName,DOB,Gender”)]AgentMaster AgentMaster)
{
if(string.IsNullOrEmpty(Convert.ToString(agentMaster.Gender)))
{
AddModelError(“性别”,“需要性别”);
}
if(ModelState.IsValid)
{
db.AgentMasters.Add(agentMaster);
等待db.saveChangesSync();
返回操作(“索引”);
}
返回视图(agentMaster);
}
看法

@model A.Models.AgentMaster
@LabelFor(model=>model.Gender,htmlAttributes:new{@class=“controllabel col-md-2”})
@DropDownListFor(model=>model.Gender,new SelectList(new[]{“Male”,“Female”}),“--select--”)
@Html.ValidationMessageFor(model=>model.Gender,“,new{@class=“text danger”})
在模型中,性别如下所示:

public Nullable<short> Gender { get; set; }
public可空性别{get;set;}
当我使用断点调试代码时,[httppost]中的性别值为null,但如果给定1或0,则可以工作。所以我在控制器中使用验证来转换为字符串,但它不起作用。我没有到达我需要改变的地方。有人能帮你找到解决办法吗?

你生成了一个
,它发回了一个
字符串(要么
“男性”
,要么
“女性”
,不能绑定到
短的

例如,将属性更改为
string
,或者如果确实需要
short
,则需要生成具有相应
值的
IEnumerable

new List<SelectListItem>()
{
    new SelectListItem() { Value = "0", Text = "Male" },
    new SelectListItem() { Value = "1", Text = "Female" }
};
新列表()
{
新建SelectListItem(){Value=“0”,Text=“Male”},
新建SelectListItem(){Value=“1”,Text=“Female”}
};

但是,将
Gender
存储为数值没有任何意义,属性应该是字符串或枚举。

我认为这是正确的,但该值没有显示在“详细信息、删除和索引”页面中??我不知道这些方法中的代码是什么(我甚至不知道您选择了上述哪些选项)我假设您选择了正确的字符串,因此不确定您的问题是什么。我使用文本和值编写,值0或1正在输入数据库,但显示在索引页中(索引操作方法)在索引页中显示什么?-如果您确实将其保留为0和1,那么它当然会在索引页中显示为0和1!您希望看到什么?索引页中的性别值为空,但会显示在数据库中。数据不会从表中检索
new List<SelectListItem>()
{
    new SelectListItem() { Value = "0", Text = "Male" },
    new SelectListItem() { Value = "1", Text = "Female" }
};