Asp.net mvc 从路由路径中获取actionlink参数

Asp.net mvc 从路由路径中获取actionlink参数,asp.net-mvc,entity-framework,ado.net-entity-data-model,Asp.net Mvc,Entity Framework,Ado.net Entity Data Model,我正在尝试添加一个webform,它允许用户添加带有特定外键的数据库条目 我正在创建这样的链接 <%= Html.ActionLink("Edit", "EditSub", new { id = id }) %> 结果URL是(其中2是我先前传递给actionlink的id)。问题是,如何从URL检索id的值?我用它来抓取“main”表,这样我就可以创建一个新的表条目,它有一个外键指向“main”表。让您的控制器函数CreateSub接受int id public Action

我正在尝试添加一个webform,它允许用户添加带有特定外键的数据库条目

我正在创建这样的链接

<%= Html.ActionLink("Edit", "EditSub", new { id = id }) %>


结果URL是(其中2是我先前传递给actionlink的id)。问题是,如何从URL检索id的值?我用它来抓取“main”表,这样我就可以创建一个新的表条目,它有一个外键指向“main”表。

让您的控制器函数CreateSub接受int id

public ActionResult CreateSub (int id)
如果您想使用此id转到表单,然后使用不同的数据集发布,则需要两个函数,通过

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult CreateSub (int id)
get用于导航到您的输入表单,表单发布时会调用post

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CreateSub (TumourGroupSubcategory tumourSubgroupToCreate)
以下是对评论中澄清的回应:

如果您放弃强类型视图,您可以这样做

ViewData["id"] = id;
ViewData["subGroupToCreate"] = ...

或者,您可以在客户端的第二个表单中使用或

来执行此操作,假设
tumorgroup
是控制器的名称,并且您有一个如下所示的路由:

routes.MapRoute(
    "Default",
    "{controller}, {action}, {id}",
    new { controller="Home", action="Index", id="" }
)
public ActionResult CreateSub (int id)
{
    // blah
}  
然后在您的
TumourGroup
控制器中,您只需要一个如下所示的控制器方法:

routes.MapRoute(
    "Default",
    "{controller}, {action}, {id}",
    new { controller="Home", action="Index", id="" }
)
public ActionResult CreateSub (int id)
{
    // blah
}  
参数id将包含Url中的id

编辑:要在提交表单时包含id:

public ActionResult CreateSub (TumourGroupSubcategory tumourSubgroupToCreate)
{
    // blah
}  
  • 将id作为属性添加到
    TumorGroupSubcategory
    类中

  • 在您提交的表单视图中,包括一个名为与
    TumorGroupSubcategory
    类中的id相同的隐藏字段,并用您的id字段填充它


  • 当您的用户提交表单时,模型绑定器将拾取该字段,并将其放入
    肿瘤Subgroups的id属性中以自动创建

    这告诉我如何在视图中获取id,但如果可能的话,我需要在控制器中获取id。是的,但MVC设置它的方式是有两个createsub方法,一个需要(int id)和一个带有(tumorGroupSubcategory tumorSubgroupToCreate)的方法,其中tumorSubgroupToCreate是通过webform传递的,我不知道如何将pass id传递给第二个方法,因为第一个方法只有return View()作为返回类型。因此您希望调用CreateSub并将父ID传递给它。然后您希望在CreateSub完成创建sub后从CreateSub发布。我理解正确吗?基本上,初始CreateSub(int-ID){return View()}将显示webform,在webform上点击submit将调用CreateSub(TumorUrGroup子类别TumorUrSubGroupToCreate),我正在寻找一种方法,将id传递到第二个表单,而不将其作为TumourGroupSubcategory类的一部分。TumourGroupSubcategory是从DB表自动生成的,因此我不确定是否可以添加新内容。它已经将TumourGroupID作为外键输入到TumourGroup中,但我不能在其中输入int,我相信,从什么时候开始MVC创建它希望TumourGroupID包含对实际TumourGroup对象引用的类。我假设您使用的是Linq to SQL?我使用的是ADO.NET实体数据模型,而不是LINQI如果
    TumourGroupSubcategory
    与您尝试捕获的ID的关系很重要,则所述ID应该已经存在于
    TumourGrou中pSubcategory
    类。只需使用该id即可。如果实体具有关系,则必须使用DTO进行显示/编辑/创建。