我有:
“任务”将外键保存到“项目”实体的实体。 在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
来获取网址参数好吗?
谢谢!
答案 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 });