MVC 4将子记录添加到现有父级

时间:2013-04-02 18:22:46

标签: entity-framework asp.net-mvc-4

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

这样可行,但此后模型仍然无效。所以这不好。

1 个答案:

答案 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屏幕的其余部分就像标准的创建屏幕一样,只是照常运行。