我是Asp Net的新手,我有一些问题。所以我举一个例子来理解,这个例子在列表中返回一个具有匹配名称的tempData。该列表在actionResult索引中创建了3个对象。
[HttpPost]
public ActionResult Buscar(String NomeP)
{
int i;
List<Models.Produto> Lista = null;
Lista = Session["SSLista"] != null ? (Session["SSLista"] as List<Models.Produto>) : new List<Models.Produto>();
for (i = 0; i< Lista.Count; i++) {
if (Lista[i].Nome.Equals(NomeP)) {
TempData["Found"] = Lista[i];
}
}
return RedirectToAction("Produto", "Home");
}
当我尝试显示返回值时,我收到此NUllReference异常,但tempData有一些返回的数据。
<%Html.EndForm(); %> <%
if (TempData["Found"] != null)
{ %>
<%
foreach (var prod in (TempData["Found"] as List<MvcApplication2.Models.Produto>))
{
%>
<br />
<h2>Produtos</h2>
<label>
Nome: <%=prod.Nome %>
</label>
<label>
Descrição <%= prod.Descricao%>
</label>
<label>
Preço: <%= prod.Valor_unitario%>
</label>
<label>
ID: <%= prod.Id%>
</label><br>
<% }
}
下图显示了Tempdata有一些数据,但是我可以在foreach中进行转换。
TempData:通常用于在一个Action方法与另一个Action方法之间传递数据,如果要将数据从控制器传递给视图,请使用ViewBag或ViewData。
无论如何,问题是您只分配Models.Produto
给您的TempData
TempData["Found"] = Lista[i];
在for循环之后,TempData只是其中包含最后一个迭代的项目,并且在您的视图中,您尝试将其强制转换为 List<Models.Produto>
foreach (var prod in (TempData["Found"] as List<MvcApplication2.Models.Produto>))
这是问题所在。
试试这个
[HttpPost]
public ActionResult Buscar(String NomeP)
{
int i;
List<Models.Produto> Lista = null;
List<Models.Produto> TempList = new List<Models.Produto>(); //new variable
Lista = Session["SSLista"] != null ? (Session["SSLista"] as List<Models.Produto>) : new List<Models.Produto>();
for (i = 0; i< Lista.Count; i++) {
if (Lista[i].Nome.Equals(NomeP)) {
TempList.Add(Lista[i]); // add the items to the temp list
}
}
TempData["Found"] = TempList; //assign the final list to temp data
return RedirectToAction("Produto", "Home");
}
在yildizm85指出之后,我也发现了这一点。因此,所有功劳归功于他。我更新了我的答案以避免进一步投反对票。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句