C# 在HTML助手下拉列表中,如何获取外键数据?
我是ASP.NET新手。我的表格是这样的 此代码在表单中显示角色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;
@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();
}