【发布时间】:2014-09-09 11:02:52
【问题描述】:
在强类型列表视图中,我试图通过 Ajax 将当前数据(作为模型列表)传递给我的控制器,以便它可以使用它。
我面临的问题是,我似乎无法将当前视图中的数据列表传递给我的控制器。使用不带参数的 AJAX 方法有效(但我需要使用参数,或者是否有其他方法可以向我的控制器提供所述信息?)。
我也尝试在构建视图时创建一个列表(测试),然后将该变量用作参数,但显然在构建后变量为空?
索引视图
@model IEnumerable<databaseModel.cbms>
@{
ViewBag.Title = "Cbms Home";
List<databaseModel.cbms> test = Model.ToList();
}
@Ajax.ActionLink("productId", "AJX_SortByProductId", new { cbmsModel = test }, new AjaxOptions()
{
HttpMethod = "GET",
UpdateTargetId = "divCbms",
InsertionMode = InsertionMode.Replace
})
控制器
public PartialViewResult AJX_SortByProductId(List<cbms> cbmsModel)
{
//Retrieves the data
List<cbms> model = cbms.SortByProductId();
//Returns the partial view
return PartialView("_Cbms", model);
}
所以,当我进入控制器时,List cbmsModel 是空的,我不能将它用作参数。我可以毫无问题地传递一个字符串,但我想在我的视图中列出当前模型数据。
编辑:
以下也不起作用:
型号
@model IEnumerable<databaseModel.cbms>
@{
ViewBag.Title = "Cbms Home";
List<databaseModel.cbms> test = Model.ToList();
List<databaseModel.cbms> cbmsModel = new List<databaseModel.cbms>();
int i = 0;
foreach (databaseModel.cbms value in test)
{
i++;
TempData.Add(i.ToString(), value);
}
}
@Ajax.ActionLink("productId", "AJX_SortByProductId", new { cbmsModel = TempData.Values.ToList() }, new AjaxOptions()
{
HttpMethod = "GET",
UpdateTargetId = "divCbms",
InsertionMode = InsertionMode.Replace
})
这仍然导致参数为空。我真的不明白为什么......
【问题讨论】:
-
要么将列表存储在 ViewBag 中并在控制器中使用它,要么在将数据发送到服务器之前在视图上对数据进行字符串化。
-
我尝试将其存储在 Viewbag 中(例如 Viewbag.Temp, ViewBag.Temp = test OR ViewBag.Temp = Model.ToList();),但 Viewbag.Temp 也是空的,当我在我的 Ajax 方法中传递它。
-
经过一些广泛的调试后,我发现 cbmsModel 在视图加载后被处理掉了,包括除了 TempData 之外的所有其他变量。现在的问题是,如何使用 TempData 传递变量?由于使用@Ajax.ActionLink("productId", "AJX_SortByProductId", new { cbmsModel = TempData.Values.ToList() }, new AjaxOptions() { HttpMethod = "GET", UpdateTargetId = "divCbms", InsertionMode = InsertionMode.Replace }) 不起作用。
标签: jquery asp.net-mvc asp.net-mvc-3 asp.net-ajax