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