在强类型列表视图中,我试图通过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
})
这仍然导致参数为空。我真的不明白为什么......
答案 0 :(得分:0)
我看到你使用Ajax.ActionLink,这很危险,因为它会生成一个link =&gt; HTTP请求GET和这些请求有限制:Get request limitations
如果你想发送&#34;复杂&#34;通过Ajax建模,我建议使用没有限制的POST请求。 我看到你没有表格,如果我理解得很好,你想要有一个显示信息的视图&amp;用于将这些信息发送到下一个操作的按钮。我能想到的唯一方法就是使用jquery ajax request&amp;在json中序列化对象。可以使用一些帮助程序或JSON.NET直接在视图中完成序列化,或者您可以在表中显示结果并使用javascript获取信息。
$.ajax({
url : ""AJX_SortByProductId/productId",
type: "POST",
data : formData, //the data you want to send
success: function(data, textStatus, jqXHR)
{
//data - response from server
}
});
如果您仍想使用@ Ajax.ActionLink,则必须注意网址并查看模型是否已正确序列化,生成的html可以提供帮助。
答案 1 :(得分:0)
编辑:在您阅读答案之前,请参阅此答案下面的评论,因为此处提供的答案仅适用于特定情况,如果最多只有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);
}