C# 无法从控制器mvc中的下拉列表中获取选定的外键值
我有两个表C# 无法从控制器mvc中的下拉列表中获取选定的外键值,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我有两个表Customer和Status CustomerController.cs // GET: Customers/Create public ActionResult Create() { P var Query = from d in db.Status orderby d.Name select d;
Customer
和Status
CustomerController.cs
// GET: Customers/Create
public ActionResult Create()
{
P var Query = from d in db.Status
orderby d.Name
select d;
ViewBag.Status = new SelectList(Query, "myStatusId", "Name", selected);
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Customer customer)
{
if (ModelState.IsValid)
{
Create.cshtml
<div class="editor-field">
@Html.DropDownListFor(model => model.status, ViewBag.Status as SelectList, String.Empty)
@Html.ValidationMessageFor(model => model.status)
</div>
模型类
MyIdClass.cs
public class MyIdClass
{
private Guid myIDField;
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public Guid myID
{
get { return myIDField; }
set { myIDField = value; }
}
}
Customer.cs
public partial class Customer : MyIdClass
{
public string Name {get; set;}
private Status statusField;
public Status status
{
get
{
return this.statusField;
}
set
{
this.statusField = value;
}
}
}
状态.cs
public partial class Status : MyIdClass {
private string nameField;
public string name {
get {
return this.nameField;
}
set {
this.nameField = value;
}
}
}
假设您的
Customer
中有一个StatusId
字段,如果除StatusId
之外,您需要调用Html.DropDownListFor
以获取客户的ForeignKey
列属性,而不是整个ForeignKey
对象属性:
@Html.DropDownListFor(model => model.StatusId, ViewBag.Status as SelectList, String.Empty)
但是,如果您没有这样的属性,并且您排除了状态
,那么您可以这样使用它:
@Html.DropDownListFor(model => model.status.myStatusId, ViewBag.Status as SelectList, String.Empty)
@*/
If you need the value of model.status.Name
You can set it using a simple script on the dropdown change,
otherwise, you don't need to use a hiddenfor
*@
@Html.HiddenFor(model => model.status.Name)
然后在Post
中,它应该使用值初始化customer.Status
属性
注意
使用包含int StatusId
的ViewModel
是一种更干净的方式,正如too在评论中提到的那样。您需要显示您的模型(但很明显,您的属性status
不是string
)我在这里排除了完整的status对象。。更新modelsA
后发一个值(所选选项的值,在您的情况下是myStatusId
的值)。无法将
绑定到复杂对象。已更新的模型类请正确执行此操作,并使用具有属性int SelectedStatus
和SelectList StatusList