C# 在HTML助手下拉列表中,如何获取外键数据?

C# 在HTML助手下拉列表中,如何获取外键数据?,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我是ASP.NET新手。我的表格是这样的 此代码在表单中显示角色 @Html.DropDownList("id", (IEnumerable<SelectListItem>)ViewBag.lis, null, new { @class = "form-control" }) 角色类 public partial class Role { public int Id { get; set; } public string name { get; set;

我是ASP.NET新手。我的表格是这样的

此代码在表单中显示角色

  @Html.DropDownList("id", (IEnumerable<SelectListItem>)ViewBag.lis, null, new { @class = "form-control" })
角色类

  public partial class Role
{
    public int Id { get; set; }
    public string name { get; set; }

    public virtual Register Register { get; set; }
}
注册类

   public partial class Register
{
    public int Id { get; set; }
    public string name { get; set; }
    public string email { get; set; }
    public string password { get; set; }
    public Nullable<int> phone_no { get; set; }

    public virtual Role Role { get; set; }
}
我认为问题在于我应该像这里的名称示例那样编写model=>model.role

 @Html.EditorFor(model => model.name, new { htmlAttributes = new { @class = "form-control" } })
这是我现在更新的内容

    ViewBag.lis = new SelectList(new dbdemoEntities().Roles, "Id", "name");
在HTML中

更新后出现问题:

更换后

      Role = db.Roles.Single(r => r.Id == obj.Role.Id)
这是另一个错误


如果要发布Register.Id属性,请更改此属性:

@Html.DropDownListFor(model => model.Id,(SelectList) ViewBag.list,new { @class="form-control"})
试试这个:

更改:
ViewBag.lis=new SelectList(new dbdemoEntities().Roles,“id”,“name”)

然后:

@Html.DropDownList(model => model.Role.Id, (IEnumerable<SelectListItem>)ViewBag.lis, null, new { @class = "form-control" })

在您的注册类Id中是角色Id还是单独的属性?我更新问题。。我不明白你的意思?你是说你的Id属性没有设置?是的,在注册表中。外键id(角色)未设置..“没有时间学习。需要尽快回答”,嗯。。。祝你好运<代码>:-)
不起作用。我甚至尝试将其更改为model.roleth,这就是我在Action ViewBag.lis=new SelectList(new dbdemonities().Roles,“id”,“name”)中从数据库表“Role”获取数据的方式;在HTML中,我希望当select中的一个项时,它应该存储在Model.Role//中,这是一个外键@HTML.DropDownListFor(Model=>Model.Role,(IEnumerable)ViewBag.lis,new{@class=“form control”}),你是说Register.Id没有设置吗?无法从Dropdownlist发布完整的角色对象,因为它只能设置一个选定属性。如果要设置
Register.Role.Id
更改为
model=>mode.Role.Id
它不起作用。。我现在添加了构造函数。。我更新了问题。。查看最后三件事name=null图片中突出显示的行您只需要Id,我将更新我的答案。你看到了吗?在数据里。我没事。现在名字也没问题,但有另一个问题。。新的行实体包装器现在正在上传问题中的图片。不,看最后一张图片
@Html.DropDownListFor(model => model.Id,(SelectList) ViewBag.list,new { @class="form-control"})
 ViewBag.lis = new SelectList(new dbdemoEntities().Roles, "Id", "name");
@Html.DropDownList(model => model.Role.Id, (IEnumerable<SelectListItem>)ViewBag.lis, null, new { @class = "form-control" })
public partial class Register
{
    public Register()
    {
        this.Role = new Role();
    }
    public int Id { get; set; }
    public string name { get; set; }
    public string email { get; set; }
    public string password { get; set; }
    public Nullable<int> phone_no { get; set; }

    public virtual Role Role { get; set; }
}
[HttpPost]
    public ActionResult register(Register obj)
    {
        using(var db = new dbdemoEntities())
        {
            var data = new Register()
            {
                email = obj.email,
                name = obj.name,
                password = obj.password,
                phone_no = obj.phone_no,
                Role = db.Roles.Single(r=> r.Id == obj.Role.Id)
            };

            db.Registers.Add(data);
            db.SaveChanges();
            ViewBag.register = "Your account has been registered!";
        }

        return PartialView();
    }