如何使用EF将子项添加到MVC 4中的父记录?
我有一个显示新闻的网格。我需要添加那些作为子记录的更新。一个数据库表有新闻,另一个有更新。它们在每个表中由NewsID链接。
新闻模式
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int NewsId { get; set; }
public string Body { get; set; }
//other fields
更新模型
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int NewsUpdateId { get; set; }
public int NewsId { get; set; }
public string Body { get; set; }
//other fields
新闻索引视图(此处仅部分发布;它是显示这些详细行的网格)
@foreach (var item in Model) {
<tr>
<td>@Html.ActionLink(item.Headline, "Details", new { id=item.NewsId })</td>
<td>@Html.Raw(item.Body.Remove(300))...</td>
//other fields
<td>@Html.ActionLink("Edit", "Edit", new { id=item.NewsId })</td>
//WOULD LIKE ANOTHER LINK GOING TO "UPDATE" SCREEN TO ADD CHILD UPDATES, PASSING IN THE PARENT ID
</tr>
}
CONTROLLER(现在)
public ActionResult Update()
{
return View();
}
但是当然,当我进入更新屏幕并保存时,没有新闻ID可以保存到更新中,但它失败了。如何将NewsID从索引屏幕/网格传递到我的“创建更新”屏幕,然后在更新屏幕上检索它并将其添加到我的保存操作中?
UPDATE 因为没有人知道如何做到这一点,所以我在没有运气的情况下进行弥补。
我尝试使用NewsUpdate屏幕,就像您传递id值的Edit一样。区别在于,对于编辑,您正在编辑该记录。对于这个NewsUpdate,我正在添加一个NewsUpdate,它是News的子记录,所以我有现有的NewsID,需要将它传递到我的NewsUpdate屏幕,最后用它来设置NewsUpdate.NewsID。
当我保存NewsUpdate屏幕时,该模型无效,因为它已丢失,所以我尝试将其设置为:
var NewsID = Request.Url.PathAndQuery.ToString(); //grab it from url News/Update/8
NewsID = NewsID.Replace("/News/Update/", ""); //results in NewsID = 8
NewsUpdate.NewsID = Convert.ToInt32(NewsID);
这样可行,但此后模型仍然无效。所以这不好。
答案 0 :(得分:0)
知道了。
public ActionResult Update(int id = 0)
{
NewsUpdate myUpdate= db.NewsUpdate.Create(); //create empty child model
myUpdate.NewsID = id; //set my parent's ID on the child model
View(myUpdate); //send child model to child's create screen aka "NewsUpdate"
}
这会在子模型中传递我的父ID,而NewsUpdate屏幕的其余部分就像标准的创建屏幕一样,只是照常运行。