【问题标题】:Passing parameters to Index action将参数传递给索引操作
【发布时间】:2012-09-10 13:31:38
【问题描述】:

我需要创建一个子视图,允许用户在主网格视图上选择一行后插入相关数据。

子视图必须接收一个 ID,该 ID 将指示哪个是父行。

如何传递这个参数?查看包?

PS:视图和控制器不同,子视图使用 Html.ActionLink 打开另一个控制器的 Index 动作。

【问题讨论】:

    标签: asp.net-mvc viewbag


    【解决方案1】:

    将父级的 ID 作为参数传递给调用子视图的操作方法。

    @Html.ActionLink("Add Related Data","Add",new { @id=364})
    

    将 364 替换为您认为的动态值

    在您的子操作中,从 ID 中获取父对象并在子视图中显示该对象。假设您有一个 ViewModel 喜欢他的子视图。

    public class ChildDetails
    {
      public int ID { set;get;}
      public string Note { set;get;}
      public int ParentID { set;get;}
      public string ParentName { set;get;}
    }
    

    获取父级详细信息并在您的 ViewModel 中为子视图设置相关属性值。

    public ActionResult Add(int id)
    {
      var parent=yourRepositary.Get(id);
      ChildDetails childViewModel=new ChildDetails();
      childViewModel.ParentID=id;
      childViewModel.Name=parent.Name;
      return View(childViewModel);
    }
    

    您的子视图将被强绑定到ChildDetails

    @model ChildDetails
    
    <h2>@Model.ParentName</h2>
    @using(Html.BeginForm())
    {
      @Html.TextBoxFor(x=>x.Note)
      @Html.HiddenFor(x=>x.ParentId)
      <input type="submit" />
    }
    

    【讨论】:

    • 我想使用现有的 Index 操作来列出子项,而不是创建新操作。有可能吗?
    • 您可以使用现有的操作。我写了 add 方法使它成为一个通用的例子
    【解决方案2】:

    将其作为查询字符串传递,因为您正在打开不同的操作。

    【讨论】:

      【解决方案3】:

      您可以通过多种方式传递参数。

      ViewBag.MyParam = "1";
      
      ViewData("MyParam") = "1";
      
      TempData("MyParam") = "1";
      

      注意:这是 VB,所以 C# 会有些不同。

      否则,您可以通过 Rob 所述的查询字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-19
        • 1970-01-01
        • 2021-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多