使用ViewData将数据从Controller传递到View

时间:2015-05-15 12:45:13

标签: c# asp.net-mvc viewdata

我正在尝试从控制器传递数据以查看,并显示这些数据。但经过多次尝试,我做不到。

控制器代码:

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,但未成功。

我不明白为什么这个值没有正确传递给View 有人可以帮我解决这个问题吗?

4 个答案:

答案 0 :(得分:6)

由于您已在ViewData的{​​{1}}上设置了一些属性,因此Controller上的ViewData可以使用该属性。另一方面,当您需要在请求之间将信息传输到另一个路由(重定向到某个操作)时,您将使用View。样本:

TempData

在视图中:

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

   ViewData["Nom"] = "bob";

   return View("ValidSearchCandidate", prodClist);
}

答案 1 :(得分:2)

您可以将ViewBag用于此

控制器:

ViewBag.name= "bob";

查看:

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

将ViewBag [&#34;尝试&#34;]替换为控制器代码中的ViewData [&#34;尝试&#34;]。

并且,在else条件下,你没有任何ViewData声明[&#34;尝试&#34;]所以 您可能需要在视图中使用ViewData之前检查它。