有没有办法将整个对象从ASP.NET MVC 5视图传递给控制器?这是我的情况:
有没有办法将整个对象传递给Update控制器方法,以便它最初用旧数据填充表单输入?就像是:
@Html.Action("Update me!", "Update", new { objectFromModelList })
然后在控制器中
public ActionResult Update(MyType parameter)
{
return View(parameter);
}
或类似的东西。请帮助,我是新手,无法在任何地方找到答案。
你的物品可能太大了!查询字符串对您可以通过浏览器传递的数据量有限制。您应该考虑传递一个唯一的id值(记录)并使用它在您的action方法中从db获取整个记录并将其传递给视图。
@foreach(var item in SomeCollection)
{
<tr>
<td> @Html.Action("Update me!", "Update", new { id = item.Id }) </td>
</tr>
}
并在动作方法
public ActionResult Update(int id)
{
var item = GetItemFromId(id);
return View(item);
}
假设GetItemFromId
方法从唯一的id值返回方法/视图模型。基本上,您可以使用db表/存储库中的唯一ID获取整个记录。
假设您的更新视图不是IEnumerable类型...
您只需要传递要发送到更新视图的记录的ID
...
像这样:
@Html.Action("Update me!", "Update", new { id = item.ID })
然后您的Update操作将如下所示:
[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 NameRecord,其中X =传递的ID。
然后,我将这些值传递给控制器,为预留实例化一个新的类/对象。新类对象还将项类/对象作为属性。例如,考虑以下内容;
var reservation = new Reservation
{
myKit = new ResourceKit()
};
之后,如果需要在会话上构建,可以将其存储在会话中。在我的情况下,我在会话中持有它,因为我允许用户检查可用性/日期。这些项目是一种物理资源,可以像库一样检出并通过办公室邮件传输。
如果你不介意客户端的数据,你可以使用LocalStorage和JavaScript存储它。这种类型的数据完全不像cookie那样安全。我使用它的方法之一是设置站点首选项。用户可以选择颜色方案,这些首选项存储在LocalStorage中。这样当返回网站时,这些偏好仍然存在。这是LocalStorage的关键属性,可能不适用于您的需求/情况。