0

如何使用 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>
}

控制器(现在)

public ActionResult Update()
    {
        return View();
    }

但是当然,当我在那个更新屏幕上保存时,没有 NewsID 可以保存到更新中并且它失败了。如何将 NewsID 从索引屏幕/网格传递到我的“创建更新”屏幕,然后在更新屏幕上检索它并将其添加到我的保存操作中?

更新由于没有人知道如何做到这一点,我正在弥补,因为我没有运气。

我尝试过使用 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);

这有效,但在此之后模型仍然无效。所以这不好。

4

1 回答 1

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

这会在子模型和 NewsUpdate 屏幕的其余部分传递我的父 ID,这就像一个标准的创建屏幕,只是像往常一样工作。

于 2013-04-04T16:43:14.613 回答