ASP.NET MVC:在创建子实体时设置父外键

时间:2009-12-26 12:40:40

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

我有:

“任务”将外键保存到“项目”实体的实体。 在MVC模型中,我有一个ProjectDetails视图,其中我有一个用于创建新任务的ActionLink

我需要为新的Task对象设置ProjectReference。 projectReference由url参数(CreateTask?projectId=4

传递

在projectDetails视图中,我有:

<%= Html.ActionLink("Create New Task", "CreateTask", new {???Set the ProjectID???  })%>

1)如何设置ProjectReference“ProjectID”?

2)使用ViewContext.Controller.ValueProvider["id"].RawValue来获取网址参数好吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

你不能只在你传递给视图的模型中设置projectId吗?类似的东西:

public ActionResult ProjectDetails()
{
    ViewData["projectId"] = GetProjectId();

    return View();
}

然后在视图中:

<%= Html.ActionLink("Create New Task", "CreateTask", ViewData["projectId"]) %>

此外,使用Request.Params并不是一个好习惯。而是使用“projectId”参数进行操作,如:

public ActionResult CreateTask(int projectId)

有关详细信息,请参阅Passing Data in an ASP.NET MVC Application

另一件事是使用ASP.NET MVC的一个想法是保持你的网址可读。尝试使用/projects/5/createtask/之类的网址,而不是/createtask.aspx?projectid=5。有关详细信息,请参阅Scott Guthrie的URL Routing with ASP.NET MVC

答案 1 :(得分:0)

好的,我找到了一个解决方案,但它并不那么漂亮:

projectdetails.aspx中的

<%= Html.ActionLink("Create New Task", "CreateTask", new { projectId = ViewContext.Controller.ValueProvider["id"].RawValue })%>
在taskcreateMethod中

int projectId = Convert.ToInt32(Request.Params["projectId"]);
taskToCreate.Project= (from p in _db.Project where p.Id ==projectId select p).First();
_db.AddToTask(taskToCreate);
_db.SaveChanges();

return RedirectToAction("Details", "Home", new { id = projectId });