【问题标题】:ASP.NET MVC: Set parent foreign key while creating a child entityASP.NET MVC:在创建子实体时设置父外键
【发布时间】:2009-12-26 12:40:40
【问题描述】:

我有:

“任务”实体持有“项目”实体的外键。 在 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 来获得良好的 url 参数?

谢谢!!

【问题讨论】:

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


    【解决方案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 的一个想法是让您的 url 保持可读性。尝试使用/projects/5/createtask/ 之类的网址,而不是/createtask.aspx?projectid=5。有关这方面的更多详细信息,请查看 Scott Guthrie 的 URL Routing with ASP.NET MVC

    【讨论】:

      【解决方案2】:

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

      在 projectdetails.aspx 中:

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

      在任务创建方法中:

      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 });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-16
        • 1970-01-01
        • 2012-10-07
        • 2018-03-26
        • 1970-01-01
        • 1970-01-01
        • 2021-10-10
        • 1970-01-01
        相关资源
        最近更新 更多