Как вы передаете массив в C #, используя Razor Pages - PullRequest
0 голосов
/ 06 ноября 2019

Это мои фрагменты файла 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, но не массив, список или объект.

Ответы [ 3 ]

2 голосов
/ 06 ноября 2019

Трудно сказать без полного контекста, но похоже, что вы скрываете члена класса, объявив локальную переменную внутри OnGet():

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

Это создает локальная переменная с именем traineeinfo, которая скрывает свойство класса (в этом случае я бы ожидал предупреждения компилятора). Так как свойство класса не установлено, вы получите исключительную ссылку на вашу страницу Razor.

Попробуйте просто

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

Я бы также рекомендовал использовать случай верблюда, чтобы было легче читать:

public string[] TraineeInfo { get; set; }

....

TraineeInfo = new string[Convert.ToInt32(countnum)];
0 голосов
/ 06 ноября 2019

Пожалуйста, оставьте снимок экрана или фрагмент кода того, как вы передаете данные в ваше представление из конца метода вашего контроллера. Это определит, есть ли у вас данные, с которыми вы хотите работать, в первую очередь.

0 голосов
/ 06 ноября 2019

Здесь, в конструкторе, я думаю, вы можете инициализировать строковый массив для предотвращения нулевого значения.

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

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

...