在一个强类型的列表视图中,我试图通过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
})
这仍然导致参数为空。我真的不明白为什么...
编辑:在阅读答案之前,请先查看此答案下方的评论,因为如果最多只有1个用户访问该网站,则此处提供的答案仅在特定情况下有效。
我通过以下方式解决了这个问题。这是一种肮脏的方式,但是可以解决问题。它将TempData传递给控制器,您只需列出TempData中的项目列表。
看法
@model IEnumerable
@{
ViewBag.Title = "Cbms Home";
if (TempData != null)
{
TempData.Clear();
}
int i = 0;
foreach (databaseModel.cbms value in Model.ToList())
{
i++;
TempData.Add(i.ToString(), value);
}
}
控制器
public PartialViewResult AJX_SortByProductId()
{
//Retrieves the data
List<object> viewDataList = TempData.Values.ToList();
TempData.Clear();
List<cbms> dataList = new List<cbms>();
if (viewDataList != null)
{
foreach (cbms cbmsEntry in viewDataList)
{
dataList.Add(cbmsEntry);
}
}
List<cbms> model = cbms.SortByProductId(dataList);
//Returns the partial view
return PartialView("_Cbms", model);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句