C# 如何在MVC中为所需关系选择现有对象? 我的域类: SiteCreate视图仅包含以下文本框: 当我回发时,会引发异常,如SiteController中所示:

C# 如何在MVC中为所需关系选择现有对象? 我的域类: SiteCreate视图仅包含以下文本框: 当我回发时,会引发异常,如SiteController中所示:,c#,razor,entity-framework-6,asp.net-mvc-viewmodel,asp.net-mvc-5.1,C#,Razor,Entity Framework 6,Asp.net Mvc Viewmodel,Asp.net Mvc 5.1,很明显,异常是由于缺少必需的“地址””对象造成的 我想选择一个现有的“地址”对象,并将其包含在“站点”实体中 我在视图中使用JQuery对话框从数据库中选择现有的“AddressId” 我的问题是如何将“地址”对象插入我视图中的“站点”? 或者将其传递给控制器并将其插入“站点”实体 请帮忙。谢谢 MVC将在尝试重建模型时,查找属性设置为Address.AddressId的input元素 加 然后通过jQuery将其值设置为所需的任何值 确保模型绑定语法正确的一种简单方法是添加 EditorFor

很明显,异常是由于缺少必需的“
地址”
”对象造成的

我想选择一个现有的“
地址
”对象,并将其包含在“
站点
”实体中

我在视图中使用JQuery对话框从数据库中选择现有的“
AddressId

我的问题是如何将“
地址
”对象插入我视图中的“
站点
”? 或者将其传递给控制器并将其插入“
站点
”实体


请帮忙。谢谢

MVC将在尝试重建模型时,查找属性设置为
Address.AddressId
input
元素

然后通过jQuery将其值设置为所需的任何值

确保模型绑定语法正确的一种简单方法是添加
EditorFor(m=>m.Address.AddressId)
然后检查它为该输入元素上的name属性生成了什么

好吧,不管怎样,您都需要将它放入一个隐藏的
元素中。我不熟悉
[Bind]
属性的细节,但我认为有一种命名输入的方法,可以说“这是站点地址的addressId”。如果没有,只需将其设为Create操作的另一个参数,并在其中分配它。

但视图中没有
地址
对象。我们只有它的一个属性。你是对的,需要引用该属性。我认为你需要将控制器修改为
public ActionResult Create([Bind(Include)(Include=“SiteId,Name,AddressId”)]Site Site)
以便它识别
AddressId
谢谢@Jonesy它为我工作了!首先,我必须删除控制器中带有
地址的绑定:
public ActionResult Create([Bind(Include=“SiteId,Name”)]Site Site)
,否则控制器在回发时需要一个
地址。收到回发后,我将其再次绑定到
站点
实体:
db.Entry(Site.Address).State=EntityState.Added
public class Site
{
    [Key]
    public virtual int SiteId { get; set; }
    public virtual Address Address { get; set; } // Required
}

public class Address
{
    [Key]
    public virtual int AddressId { get; set; }
}
@Html.EditorFor(model => model.SiteId)
[HttpPost]
public ActionResult Create([Bind(Include="SiteId,Name")] Site site)
{
    if (ModelState.IsValid)
    {
        db.Sites.Add(site);
        db.SaveChanges(); // ***Error Here***!!!
        return RedirectToAction("Index");
    }
        return View(site);
}
<input type="hidden" name="Address.AddressId" value="" id="address" />
@Html.HiddenFor(m => m.Address.AddressId, new { @id="address"})