ViewData 始终为空

Posted

技术标签:

【中文标题】ViewData 始终为空【英文标题】:ViewData is always null 【发布时间】:2019-07-18 21:32:37 【问题描述】:

我知道很多人问过这个问题,但没有人解决我的问题,请看简单的两个代码sn-ps,我使用的是dotnet core 2.2。

我在ViewData 中设置数据的方式有什么问题。

Controller.cs:

public async Task<IActionResult> GetWebTripMetaData(Guid tripId)

    try
    
        ViewData["Greeting"] = "Hello World!";
        return View();
    
    catch (Exception)
    
        return BadRequest("Internal Server Error");
    

查看:

@page
@model TripTale.Backend.Pages.tripModel
<html>
  <head>
      <link href="@Url.Content("~/Styles/trip.css")" rel="stylesheet" type="text/css" />
   </head>
    <body>
        @ViewData["Greeting"]
    </body>
</html>

请注意,当从视图页面中删除 ViewData["Greeting"] 时,它可以正常工作。添加时,未设置实例的对象引用被抛出。

【问题讨论】:

如果您将模型传递给视图,为什么要使用 ViewData?为什么不直接使用模型? 我知道我可以做到,但我只是在测试一个简单的东西,并且发生了上述情况,所以我想知道发生了什么。 【参考方案1】:
public IActionResult Index()

    try
    
            ViewData["Greeting"] = "Hello World!";
            return View();
    
    catch (Exception)
    
            return BadRequest("Internal Server Error");
    

【讨论】:

【参考方案2】:

我只是使用 ViewBag.Greeting 而不是 ViewData["Greeting"] 并且效果很好

【讨论】:

【参考方案3】:

如果您需要在加载控制器时在 .NET Core 中设置 ViewBag 数据,请覆盖 OnActionExecuting。在控制器的构造函数中设置时,我的 ViewBag 数据始终为空。

    public override void OnActionExecuting(ActionExecutingContext context)
    
        base.OnActionExecuting(context);
        this.ViewBag.FullAccountName = $"this.CurrentLdapUser.DisplayName (this.CurrentLdapUser.UserNameWithDomain)";
    

【讨论】:

以上是关于ViewData 始终为空的主要内容,如果未能解决你的问题,请参考以下文章

ViewData 和 ViewBag 有啥区别?

简述viewdata,viewbag和tempdata的区别

ASP.NET-viewBag Viewdata Tempdata

ViewData 的替代品?

ViewData丶ViewBag和TempData

ViewData,ViewBag和TempData