Получение нулевого значения при попытке создать экземпляр класса Model в другом методе действия в том же контроллере - PullRequest
0 голосов
/ 26 октября 2019

Здравствуйте, вам нужна помощь по нижеуказанному, пожалуйста.

Шаг 1: У меня есть контроллер с именем " Managing ", который имеет два метода. Методы " AllStudent " и " StudentDetails ".

Метод действия AllStudent извлекает данные из API конечной точки и отображает их в AllStudent Просмотр. Внутри метода действия « AllStudent » у меня есть строка Json, которая сопоставляется с AllStudentModel ( См. Ниже )

Я НЕсоздать конструктор для него ??? Разве это не проблема ??

  public class AllStudentModel
    {
            public int Id { get; set; }
            public string Title { get; set; }
            public string Name { get; set; }
            public string Surname { get; set; }
            public string Course { get; set; }
            public string Picture { get; set; }
    }



//Action method AllStudent
public async Task<ActionResult> AllStudent()
{
  //Fetching data thru webapi... in a foreach loop
  ...

  List<AllStudentModel> stdList = new List<AllStudentModel>();

  stdList.Add(PropertyDetails);

  return View(stdList);

}

Внутри AllStudent Просмотр, в верхней части страницы, у меня есть это утверждение ( @ model IEnumerable ) иЯ могу получить данные, используя цикл foreach. ( см. Ниже )

foreach (var item in Model.OrderBy(x => x.Id))
{
    <p>@Html.DisplayFor(modelItem => item.Name)</p>
    <img style="width: 100%" src="@Html.DisplayFor(modelItem => item.Picture)" alt="Image">
    ...
}

Пока все отлично работает, я имею в виду, что я могу отображать полученные данные в AllStudentView.

Что я должен отобразитьв AllStudentView только: Идентификатор студента, изображение студента и имя студента для всех студентов, и я могу отобразить его правильно, и он работает нормально. (См. Рисунок ниже.)

КАРТИНКА ЗДЕСЬ !!!

Если пользователь нажимает на «View More Details» для одного студента, этовозможность выбрать выбранный идентификатор и перенаправить его на другую страницу, где пользователю необходимо просмотреть все данные для выбранного учащегося по идентификатору.

Шаг 2: У меня есть другойМетод действия с именем " studentDetails " внутри того же контроллера " Управление ", который должен отображать все детали (модель свойства) для выбранного учащегося.

Внутри studentDetails метод действия, когда я пытаюсь создать экземпляр " AllStudentModel " Я получил нулевое значение при запуске и отладке его !!! Не уверен, почему ???

Метод действия StudentDetails не имеет созданной для него модели, поскольку я использую ту же модель, что и "AllStudentModel", потому что это тот же шаблон данных !!!

    [HttpGet]
    public ActionResult StudentDetails(int? id)
    {

        Debug.WriteLine("Id selected by user : " + id);     // This line is working fine as I'm able to see the Id the user selected from "AllStudentView" when he clicks "View More Details"


        // ++++++ GETTING NULL VALUE FOR ALL THE BELOW WHILE DEBUGGING ++++++ 


        var stdModel = new AllStudentModel();

        Debug.WriteLine(stdModel.Id);                       // Getting Null value from all the below                                
        Debug.WriteLine(stdModel.Title);                    // Getting Null value from all the below
        Debug.WriteLine(stdModel.Name);                     // Getting Null value from all the below
        Debug.WriteLine(stdModel.Surname);                  // Getting Null value from all the below
        Debug.WriteLine(stdModel.Course);                   // Getting Null value from all the below
        Debug.WriteLine(stdModel.Picture);                  // Getting Null value from all the below

    }

Пока что я не использую никакого взаимодействия с базой данных !!!

Кто-то сказал мне, что для инициализации "AllStudentModel" мне нужен КОНСТРУКТОРсвойства. это правда ???

На шаге 1 все работает отлично !!! Только на шаге 2 я получаю нулевое значение

Почему я не могу получить данные из метода действия "studentDetails"?

Не могли бы вы помочь?

===========================================================================

Также я хотел добавить, что: я выбираю данные из API и загружаю эти данныедля моделирования, как показано ниже: используя только PropertyDetailsList.Add (PropertyDetails); вместо возможно ... PropertyDetailsList.Add (New PropertyDetails); , как видно здесь

                if (response2.IsSuccessStatusCode)
                {
                    APIdatas2 = await response2.Content.ReadAsStringAsync();

                        PropertyDetailsModel PropertyDetails = JsonConvert.DeserializeObject<PropertyDetailsModel>(APIdatas2);

                        stringJsonConv = PropertyDetails;

                        PropertyDetailsList.Add(PropertyDetails);

                        Debug.WriteLine("ID ALREADY PROCESSED : " + item.Id);

                }
                else
                {
                    Debug.WriteLine("Error occurred, the status code is : {0}", response2.StatusCode);
                }

1 Ответ

0 голосов
/ 27 октября 2019

Я НЕ СОЗДАЛ КОНСТРУКТОРА для него ??? Разве это не проблема ??

Если вы не укажете конструктор для класса, C # внутренне создаст для него конструктор по умолчанию. Значения по умолчанию для типов данных можно увидеть здесь .

var stdModel = new AllStudentModel ();

В методе данных вашего ученика высоздание новой модели студента, но вы не сопоставляете никакие данные с ней. C # по умолчанию значения свойств в соответствии с таблицей в ссылке выше. Вот почему свойства в stdModel являются нулевыми (или 0 в случае свойств int).

Вам нужно будет сопоставить некоторые данные в stdModel перед отправкой их вашему представлению, как вы делаете это с AllStudentModel.

Метод действия AllStudent извлекает данные из API конечной точки и отображает их вв AllStudent View. Внутри метода действия «AllStudent» у меня есть строка Json, которая сопоставляется с AllStudentModel (см. Ниже)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...