如何使用 Razor Pages 在 C# 中传递数组

How do you pass an array in C# using Razor Pages

这是我的 viewtrainees.cshtml.cs 文件片段,其中包含数组代码:

public class viewTraineeModel : PageModel
{
    public string[] traineeinfo { get; set; }
    (...)

在我的 OnGet() 中:

string[] traineeinfo = new string[Convert.ToInt32(countnum)];

int i = 0;

while (trainees.Read())
{
    traineeinfo[i] = trainees["t3_win"].ToString();
    i++;
}

所以我的数组中的所有内容都已设置好,我什至在 .cs 文件中对其进行了测试。但是,当我传递数组或认为我将数组传递给视图时,它总是给我一个内部错误。

我已经尝试了我的 viewtrainees.cshtml 文件:

@Model.traineeinfo[0]

我得到 NullReferenceException:对象引用未设置到对象的实例。错误。

我的代码的 head 元素如下所示。

@page
@model T3_Landing.Pages.viewTraineeModel

@{
    ViewData["Title"] = "View Trainees";

    string[] traineeinfo = Model.traineeinfo as string[];    
}

我已经尝试过重新初始化和不重新初始化字符串数组,如上所示。我真的很想让它工作。

请注意,我可以使用@Model.examplestring 传递常规字符串,但绝不能传递数组、列表或对象。

如果没有完整的上下文很难分辨,但看起来你是在 隐藏 class 成员,方法是在 OnGet() 中声明一个局部变量:

string[] traineeinfo = new string[Convert.ToInt32(countnum)];

这会创建一个名为 traineeinfolocal 变量,它隐藏了 class 属性 (如果是这种情况,我希望编译器警告).由于未设置 class 属性,您会在 Razor 页面中遇到空引用异常。

试试

traineeinfo = new string[Convert.ToInt32(countnum)];

我还建议使用驼峰式大小写以使其更易于阅读:

public string[] TraineeInfo { get; set; }

....

TraineeInfo = new string[Convert.ToInt32(countnum)];

在构造函数中,我认为你可以初始化字符串数组以防止空值。

public class viewTraineeModel : PageModel
{
public string[] traineeinfo { get; set; }
...

public viewTraineeModel()
{
traineeinfo=new string[0];
}

请提供屏幕截图或代码片段,说明您如何将数据从控制器方法端传递到视图。这将决定您是否首先在视图中拥有要使用的数据。