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"})