使用ViewData将数据从控制器传递到视图

4

我正在尝试将控制器中的数据传递到视图,并显示这些数据。但是经过多次尝试,我无法实现。

控制器代码:

public ActionResult ValidSearch(ProductSearchParam gp)
{

    if (gp.IsCandidate)
    {
        ViewBag.abc="bob";
        List<ProductCandidate> prodClist = new List<ProductCandidate>();
        prodClist = Pcs.SearchParam(gp,0,100);
        ViewBag.total = prodClist.Count;
        return View("ValidSearchCandidate", prodClist);
    }
    else
    {
        List<Product> prodlist = new List<Product>();
        prodlist = Ps.SearchParam(gp,0,100);
        ViewBag.total = prodlist.Count;
        return View("ValidSearch", prodlist);
    }

    //return View();
}

查看代码:
<body>
    <div>

        <p>Bonjour @ViewBag.abc</p>

我甚至尝试了TempDataViewBag,但没有成功。
我不明白为什么值没有正确传递到视图中。 有人可以帮我解决这个问题吗?

TempData 不是 ViewData!请展示您尝试访问 ViewData 属性的方式。 - user3559349
抱歉我的错误,我已经正确尝试了,但它仍然不起作用。 - Antoine Ravier
4个回答

7

如果你在Controller上设置了ViewData的一些属性,那么你将可以在View中的ViewData上使用它。另一方面,如果你需要在请求之间转移信息(重定向到一个操作),则可以使用TempData。例如:

public ActionResult ValidSearch(ProductSearchParam gp)
{
   List<ProductCandidate> prodClist = new List<ProductCandidate>();

   ViewData["Nom"] = "bob";

   return View("ValidSearchCandidate", prodClist);
}

在视图中:

@ViewData["Nom"].ToString()

@foreach(var prod in  Model)
{
   <li>@prod.Name</li>
}

谢谢您的回复,我已经尝试了您的视图代码,ProductCandidate是我创建的一个类,所以在视图中无法找到它。 - Antoine Ravier

2
你可以使用ViewBag来实现这一点。
控制器:
ViewBag.name= "bob";

查看:

 <p>Bonjour @ViewBag.name</p>

在控制器代码中使用.而不是[""]会导致错误。 - Antoine Ravier
这是因为您使用了关键字“try”。 - Aman Khanna
请使用ViewBag而不是ViewData。 - Aman Khanna
我觉得你对ViewBag和ViewData有些混淆了,请确保你在控制器和视图中都使用了viewBag。 - Aman Khanna
我不会混淆,在视图和控制器中使用相同的“View”对象。 - Antoine Ravier
显示剩余4条评论

1
在您的示例中,您在控制器中使用了ViewData,在视图中使用了TempData。
如果您在控制器中使用ViewData ["Nom"],则应在视图中使用ViewData ["Nom"]。您确定您没有拼错对象吗?

对不起,在示例中我做错了,无论如何,如果ViewData在控制器和视图中,它都不起作用。 - Antoine Ravier
你是在 View 或 LayoutPage 中调用 ViewData 吗? - Fabio Luz
我不太明白你的问题,我正在调用ViewData,在视图的Html(body)部分。 - Antoine Ravier
你确定你的Action方法在ViewData赋值之前没有返回吗?如果可以的话,请贴出你的Action的完整代码。 - Fabio Luz
据我所见,有两个视图:ValidSearch和ValidSearchCandidate。ViewData ["try"]仅存在于选中ValidSearchCandidate时。请确认您将@ ViewData ["try"]放在正确的视图中。 - Fabio Luz

1
在您的控制器代码中,将ViewBag["try"]替换为ViewData["try"]。
另外,在else条件中,您没有声明任何ViewData["try"],因此在视图中使用之前可能需要检查ViewData。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接