C# 在ASP.NET MVC 5中将整个对象从视图传递到控制器

C# 在ASP.NET MVC 5中将整个对象从视图传递到控制器,c#,.net,asp.net-mvc,asp.net-mvc-5,C#,.net,Asp.net Mvc,Asp.net Mvc 5,是否有方法将整个对象从ASP.NET MVC 5视图传递到控制器?这就是我的情况: 我有一个显示DB表中所有行的视图 视图的模型是IEnumerable 每一行的数据后面都有一个链接,该链接指向脚手架式更新视图 是否有一种方法可以将整个对象传递给updatecontroller方法,以便它最初使用旧数据填充表单输入?比如: @Html.Action("Update me!", "Update", new { objectFromModelList }) 然后在控制器中 public Act

是否有方法将整个对象从ASP.NET MVC 5视图传递到控制器?这就是我的情况:

  • 我有一个显示DB表中所有行的视图
  • 视图的模型是IEnumerable
  • 每一行的数据后面都有一个链接,该链接指向脚手架式更新视图
是否有一种方法可以将整个对象传递给updatecontroller方法,以便它最初使用旧数据填充表单输入?比如:

@Html.Action("Update me!", "Update", new { objectFromModelList })
然后在控制器中

public ActionResult Update(MyType parameter)
    {
        return View(parameter);
    }

或者类似的。请帮帮我,我是新手,在任何地方都找不到答案。

你的物体可能太大了!查询字符串对通过基于浏览器的查询字符串可以传递的数据量有限制。您应该考虑传递一个唯一的ID值(记录),并使用该方法从DB中获取整个记录,并将其传递给视图。

@foreach(var item in SomeCollection)
{
  <tr>
    <td> @Html.Action("Update me!", "Update", new {  id = item.Id }) </td>
  </tr>
}

假设
GetItemFromId
方法从唯一id值返回方法/视图模型。基本上,您可以使用此唯一id从db表/存储库中获取整个记录。

假设您的更新视图不是IEnumerable类型

您只需将要发送到更新视图的记录的
ID

像这样:

@Html.Action("Update me!", "Update", new { id = item.ID })
然后,您的更新操作将如下所示:

[HttpGet]
public ActionResult Update(int id)
{
    var parameter = db/* connection string variable */.TableName.Find(id);
    return View(parameter);
}
那么你的链接应该能正常工作


希望这有帮助

我搜索了自己,除了传递ID之外,我发现最好的方法是将您可能需要的任何其他变量存储到隐藏的输入字段或HTML5标记中。然后,您可以编写脚本来处理任何按钮/链接单击事件。通过这种方式,您可以存储每个记录的重要对象属性,并轻松地将它们传递回控制器。在这里考虑客户端,一旦数据到达客户端,使用客户端工具处理并传递回服务器端/控制器

我对一种图书馆预订系统做了类似的事情,它允许用户在可用日期预订物品。我将所有可用记录传递给视图。每个记录都有几个字段,我想保留这些字段,包括供用户参考的ID。当用户单击按钮时,我收集所需的字段

可以使用隐藏的HTML5表单输入字段,也可以使用JavaScript使用GetElementByID收集这些值。这方面的一个例子是将ID存储在div包装器中。然后让另一个div保存一个子参数。您可以使用Javascript查找记录ID,然后根据其ID获取第二个div。示例是从XRecord获取ID namecord,其中X=传递的ID

然后我将这些值传递给控制器,为保留实例化一个新的类/对象。新类对象还将item类/对象作为属性。例如,考虑以下内容;
    var reservation = new Reservation
    {
    myKit = new ResourceKit()
    };
之后,如果需要在会话上构建,可以将其存储在会话中。在我的例子中,我将它保存在会话中,因为我允许用户检查可用性/日期。这些项目是一种物理资源,可以像图书馆一样检出,并通过办公室邮件传递


如果不介意将数据放在客户端,可以使用LocalStorage和JavaScript存储数据。这种类型的数据根本不像cookie那样安全。我使用的方法之一是设置站点首选项。用户可以选择颜色方案,这些首选项存储在LocalStorage中。这样,当用户返回到站点时,这些首选项将保持不变。这是LocalStorage的一个关键属性,可能不适用于您的需要/环境。

您可以发布整个视图吗?我确实希望避免这些混乱的URL,所以是的。。。非常感谢。它确实有帮助。谢谢你。
    var reservation = new Reservation
    {
    myKit = new ResourceKit()
    };