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和tempdata的区别