我是Asp Net的新手,我有一些问题。所以我举一个例子来理解,这个例子返回一个带有List中匹配名的tempData。 List在actionResult Index中创建了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有一些数据作为回报。
&lt;%Html.EndForm(); %GT; &lt;%
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。
答案 0 :(得分:2)
通过简单地调试代码,您应该能够找到导致NullReferenceException
值的null。你还应该说明你想要访问它的哪个视图。
但是在目前的情况下,您要将Models.Produto
的单个实例设置为TempData["Found"]
,但将其转换为List<MvcApplication2.Models.Produto>
,这会导致空引用。
尝试在控制器中设置TempData["Found"] = Lista;
。
答案 1 :(得分:0)
TempData:通常用于在一个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 指出后发现了这一点。所以所有信用都归他所有。我更新了我的答案以避免进一步的投票。