RazorPages:viewData 中的未定义键未抛出异常
RazorPages: undefined key in viewData not throwing exception
我正在 ASP.NET 核心中使用 Razor Pages 作为学习练习,当我尝试在 viewData 中使用未定义的键时我注意到的一件事是没有抛出异常。我假设这是故意的,但我想知道......为什么?我应该如何检测此类错误?似乎很容易打错字,而且在为时已晚之前很难注意到。一个例子:
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
namespace Infodawn.Pages
{
public class IndexModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
public IndexModel(ILogger<IndexModel> logger)
{
_logger = logger;
}
public void OnGet()
{
// doesn't throw exception, even though viewData["bar"] is undefined:
ViewData["foo"] = ViewData["bar"];
// throws exception, as expected:
Dictionary<string, int> dict = new Dictionary<string, int>();
int a = dict["bar"];
}
}
}
如果未设置 ViewData 项,它将是 null
。因此,您应该在尝试使用 ViewData 项目之前测试是否为 null:
if(ViewData["bar"] != null)
{
//
}
在使用依赖于 "magic string" 的任何 API 时(例如字符串索引器),存在打字错误进入代码并导致错误等的固有风险。一个通用的解决方案是使用常量来表示键值。
在 Razor Pages 中,建议使用 PageModel properties 将数据从控制器而不是 ViewData 传递到视图。
我正在 ASP.NET 核心中使用 Razor Pages 作为学习练习,当我尝试在 viewData 中使用未定义的键时我注意到的一件事是没有抛出异常。我假设这是故意的,但我想知道......为什么?我应该如何检测此类错误?似乎很容易打错字,而且在为时已晚之前很难注意到。一个例子:
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
namespace Infodawn.Pages
{
public class IndexModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
public IndexModel(ILogger<IndexModel> logger)
{
_logger = logger;
}
public void OnGet()
{
// doesn't throw exception, even though viewData["bar"] is undefined:
ViewData["foo"] = ViewData["bar"];
// throws exception, as expected:
Dictionary<string, int> dict = new Dictionary<string, int>();
int a = dict["bar"];
}
}
}
如果未设置 ViewData 项,它将是 null
。因此,您应该在尝试使用 ViewData 项目之前测试是否为 null:
if(ViewData["bar"] != null)
{
//
}
在使用依赖于 "magic string" 的任何 API 时(例如字符串索引器),存在打字错误进入代码并导致错误等的固有风险。一个通用的解决方案是使用常量来表示键值。
在 Razor Pages 中,建议使用 PageModel properties 将数据从控制器而不是 ViewData 传递到视图。