如何在ASP.NET MVC中将Model传递回Controller?

时间:2014-02-27 19:01:42

标签: c# asp.net-mvc razor

我的视图中显示的模型已按用户操作进行过滤,因此某些原始数据不再存在。注意ActionLink的{​​{1}},这就是我的视图显示模型的方式:

EditRow

@foreach (var item in Model) { <tr> <td> @Html.DisplayFor(modelItem => item.User.FirstName) </td> <td> @Html.DisplayFor(modelItem => item.User.LastName) </td> <td> @Html.DisplayFor(modelItem => item.User.Email) </td> <td> @item.Weekly.WeekBeginning.ToShortDateString() - @item.Weekly.WeekEnding.ToShortDateString() </td> <td> @(item.WeeklyTargetId != ViewBag.Edited ? Html.DisplayFor(modelItem => item.Hours) : Html.EditorFor(modelItem => item.Hours)) </td> <td> //here is the line I am trying to pass the model through: @Html.ActionLink("Edit", "EditRow", new {id = item.WeeklyTargetId, currentSelection = Model}) | @Html.ActionLink("Details", "Details", new {id = item.WeeklyTargetId}) | @Html.ActionLink("Delete", "Delete", new {id = item.WeeklyTargetId}) </td> </tr> } ActionLink我能够轻松传递每个项目的ID,但是当我添加EditRow甚至currentSelection = Model时,控制器方法会收到数为0.

以下是我正在使用的操作签名:

= Model.ToList()

我的问题是如何将视图中显示的当前(filterd)模型传递给控制器​​操作?我应该以不同的方式解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

这不是实现它的正确方法,但是如果你必须这样做,你最好从模型中的每个项目而不是模型对象本身传递ID。然后在Edit(GET)方法中,您可以使用这些ID从DB获取这些完整对象。

虽然这个代码的意图并不清楚。如果每一行都有一个“编辑”链接,那么我会假设点击那个只关心那个特定的行而不是整个列表。更多细节将有助于更好地回答这个问题。

更新: 如下所述,最好的方法是使用AJAX(推荐使用jQuery)。单击编辑链接后,您应该在JS中启动单击处理程序:

$(".editLink").click(function(){
   //Code Here
});

click函数的逻辑是从行中获取数据并使AJAX Post回到控制器操作。

$.post(urlToAction, data, succuessFunction);

这对您来说非常合适,但您必须手动执行大量数据插入,更新和删除操作。有一些非常方便的JS框架,比如Knockout JS,它会在你预先进行一些布线/管道工作后自动为你处理。

我建议你检查一下。