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

C# 使用ViewData将数据从控制器传递到视图,c#,asp.net-mvc,viewdata,C#,Asp.net Mvc,Viewdata,我试图将数据从控制器传递到视图,并显示这些数据。但经过多次尝试,我还是做不到 控制器代码: public ActionResult ValidSearch(ProductSearchParam gp) { if (gp.IsCandidate) { ViewBag.abc="bob"; List<ProductCandidate> prodClist = new List<ProductCandidate>();

我试图将数据从控制器传递到视图,并显示这些数据。但经过多次尝试,我还是做不到

控制器代码:

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();
}
公共操作结果有效搜索(ProductSearchParam gp)
{
如果(总成IsCandidate)
{
ViewBag.abc=“bob”;
List prodClist=新列表();
prodClist=Pcs.SearchParam(gp,0100);
ViewBag.total=prodClist.Count;
返回视图(“ValidSearchCandidate”,prodClist);
}
其他的
{
List prodlist=新列表();
prodlist=Ps.SearchParam(gp,0100);
ViewBag.total=prodlist.Count;
返回视图(“ValidSearch”,prodlist);
}
//返回视图();
}
查看代码:

<body>
    <div>

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

你好@ViewBag.abc

我甚至尝试过
TempData
ViewBag
,都没有成功

我不理解为什么值没有正确地传递到视图
有人能帮我解决这个问题吗?

在您的示例中,您在Controller中使用了ViewData,在View中使用了TempData


如果在控制器中使用ViewData[“Nom”],则应在视图中使用ViewData[“Nom”]。您是否使用了没有拼写错误的对象?

由于您在
控制器上的
ViewData
上设置了一些属性,因此可以在
视图上的
ViewData
上使用它。另一方面,您有
TempData
,当您需要将请求之间的信息传输到另一个路由(重定向到某个操作)时,可以使用它。对于示例:

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

   ViewData["Nom"] = "bob";

   return View("ValidSearchCandidate", prodClist);
}
公共操作结果有效搜索(ProductSearchParam gp)
{
List prodClist=新列表();
ViewData[“Nom”]=“bob”;
返回视图(“ValidSearchCandidate”,prodClist);
}
并且认为:

@ViewData["Nom"].ToString()

@foreach(var prod in  Model)
{
   <li>@prod.Name</li>
}
@ViewData[“Nom”].ToString()
@foreach(模型中的var prod)
{
  • @产品名称
  • }
    您可以使用ViewBag进行此操作

    控制器:

    ViewBag.name= "bob";
    
    视图:

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

    将控制器代码中的ViewBag[“try”]替换为ViewData[“try”]

    并且,在else条件下,您没有任何ViewData的声明[“try”]so
    在视图上使用ViewData之前,您可能必须先检查它。

    TempData
    不是
    ViewData
    !显示您如何尝试访问
    ViewData
    属性对不起,我的错误,我已经正确尝试了,但它不起作用。对不起,我在示例中做得不对,如果ViewData位于控制器和视图中,它就不起作用。您是在视图或布局页面中调用ViewData吗?我真的不明白您的问题,我正在调用视图的Html(主体)部分的ViewData。您确定在ViewData属性之前您的操作方法没有返回吗?如果可能的话,发布完整的操作代码正如我所看到的,有两个视图:ValidSearch和ValidSearchCandidate。ViewData[“try”]仅在ValidSearchCandidate为选定项时才存在。您是否正在将@ViewData[“try”]放入正确的视图中?谢谢您的回答,我已经尝试了您的视图代码,ProductCandidate是我创建的类,因此它在视图中是“不可修改的”。使用。uuuuu而不是[“uuuuuuu”]会在控制器代码中出现错误。这是因为您使用了关键字“try”。请使用ViewBag而不是ViewData。我想您可能会混淆ViewBag和ViewData,请确保您在控制器中以及在视图中使用ViewBag。我的错误是,我只是复制粘贴了一行错误的内容。但它不起作用。。。我已经使用了ViewBags/数据,我不明白为什么它不起作用。。。