【问题标题】:passing vars from Index View to Create View将变量从索引视图传递到创建视图
【发布时间】:2012-02-13 19:23:36
【问题描述】:

我在索引页面上有 2 个下拉列表,我希望将所选项目的 id 传递给创建页面,以便我可以像索引页面一样填充创建页面上的 2 个下拉列表。

您能否建议我如何做到这一点?

目前我在索引视图中有这个:-

    @Html.ActionLink("Create New", "Create", new { LeagueId = "ddlLeagues" }, new { ClubId = "ddlClubs" })

然后在控制器中:-

        public ActionResult Create(int LeagueId, int ClubId)
    {
        var _LeagueID = LeagueId;
        var _ClubID = ClubId;

非常感谢任何帮助!

谢谢

【问题讨论】:

  • 查看我的更新解决方案

标签: asp.net-mvc-3 c#-4.0 entity-framework-4 razor


【解决方案1】:

您可以按照这篇文章中的说明进行操作:

ActionLink routeValue from a TextBox

你基本上需要用一个路由到 create 函数的表单来包装你的下拉列表,并且提交将负责将这些值传递给你的控制器,因为它们将在表单数据中:

@using(Html.BeginForm("Create", "Footballer", FormMethod.Get))
{
  @Html.DropDownList("LeagueId", Model.Leagues)
  @Html.DropDownList("ClubId", Model.Clubs)

  <input type="submit" value="Create"/>
}

如果您使用具有 LeagueId 和 ClubId 属性的强类型模型,请使用:

@Html.DropDownListFor(m => m.LeagueId, Model.Leagues)
@Html.DropDownListFor(m => m.ClubId, Model.Clubs)

Model.Clubs 和 Model.League 是 IEnumerables,您将使用它们来填充您的 dropDownsofcourse

在您的控制器中确保您具有以下内容:

[HttpGet]
public ActionMethod Create(int LeagueId, int ClubId)
{
  //return your Create View
}

[HttpPost]
public ActionMethod Create(FormCollection data)
{
  //Perform the create here
}

【讨论】:

  • 嗨,Bassam,按照你说的做,我得到以下信息:- localhost:7246/Footballer/…
  • @Johann 这会将它们传递到您的控制器中,如果它们是在您的路由中定义的,那么它们将作为 RequestString 的一部分被发送
  • 嗨,Bassam,但我想要的是例如:-localhost:7246/Footballer/Create?LeagueId=1&ClubId=5。我怎样才能得到它?
  • 我们无法看到您的本地主机,因为它是本地的。您需要向我们发送一个非本地 IP 地址。
  • 我认识 Patrick,但这是一个仍在我本地的测试应用。我只需要知道如何获取 ID
【解决方案2】:

您可以在应用程序RegisterRoutes 中添加路由:

routes.MapRoute(
        "CreateFootBallerWith2ComboOptions",
        "{controller}/{action}/{LeagueId}/{ClubId}",                           
        new { controller = "Footballer", action = "Create", LeagueId = -1, ClubId = -1 }  // Default Values
    );

然后,您可以将 Bassam 建议的内容与作为 Html 助手的 ActionLink 一起使用。

@Html.ActionLink("Create New", "Create", 
                new { LeagueId = 1, ClubId = 213 });

或直接在浏览器中使用:

localhost:7246/Footballer/Create/1/5

【讨论】:

  • 嗨帕特里克,但是我如何在新的 { LeagueId = 1, ClubId = 213 }) 中获得 1 和 213?如何获取选定的值?
  • 嗯,你可以按照你想要的方式提供那些 1 和 5。您可以使用 Javascript 或用 ASP 生成链接。您是开发人员,并且您是唯一知道您希望如何实施的人。您可以将组合创建为自动发送到服务器的表单。
猜你喜欢
  • 2018-02-21
  • 2020-07-04
  • 2019-07-24
  • 2021-09-13
  • 2019-01-15
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多