Проблема MVC для доступа к данным из базы данных: словарь параметров содержит пустую запись для параметра 'id' с ненулевым типом 'System.Int32' - PullRequest
1 голос
/ 13 мая 2019

Я работаю в MVC, где я пытаюсь получить доступ к данным из базы данных. Я новичок в MVC. Я получаю следующую ошибку:

The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Details(Int32)' in 'MVCDemo1.Controllers.EmployeeController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Parameter name: parameters

Код:

Database.SetInitializer<MVCDemo1.Models.EmployeeContext>(null);

Я добавил вышеуказанную строку в файл global.asax.cs и получаю там ошибку.

Ниже моя модель: Employee.cs

namespace MVCDemo1.Models
{
    [Table("tblEmployee")]
    public class Employee
    {
        [Key]
        public int EmployeeId { get; set; }
        public string Name { get; set; }
        public string Gender { get; set; }
        public string City { get; set; }
    }
}

Ниже приведен мой коддля контроллера: EmployeeController

public ActionResult Details(int id)
        {                    
                EmployeeContext employeeContext = new EmployeeContext();
                Employee employee = employeeContext.Employees.Single(x =>           x.EmployeeId == id);

                return View(employee);

    }

Ниже приведен код для View: details.cshtml

@model MVCDemo1.Models.Employee

    @{
        ViewBag.Title = "Employee Details";
    }

    <h2>Employee Details</h2>

    <table style="font-family:Arial">
        <tr>
            <td>
                Employee ID:
            </td>
            <td>
                @Model.EmployeeId
            </td>
        </tr>
        <tr>
            <td>
                Name:
            </td>
            <td>
                @Model.Name
            </td>
        </tr>
        <tr>
            <td>
                Gender:
            </td>
            <td>
                @Model.Gender
            </td>
        </tr>
        <tr>
            <td>
                City:
            </td>
            <td>
                @Model.City
            </td>
        </tr>
    </table>

Мой маршрут configPath:

defaults: new { controller = "Employee", action = "Index", id = UrlParameter.Optional }

Может кто-нибудь просветитьмне с этой ошибкой? Любая помощь будет оценена.

Я попытался, удалив id = UrlParameter.Optional из routeconfig, но не работал для меня.

Ответы [ 3 ]

2 голосов
/ 13 мая 2019

Ошибка исходит из инфраструктуры MVC и не имеет никакого отношения к конфигурации вашей базы данных.Как говорится в ошибке, у вас есть необнуляемый аргумент для вашего действия, int, и вы не отправляете значение для него.Это может произойти, если вы выполняете HTTP-вызовы для этого действия без указания значения для id, например, через строку запроса в URL-адресе или иным образом вызывая метод.Оставив id = UrlParameter.Optional, вы сможете это сделать.Если вы удалите это, вы можете увидеть другую ошибку, подсказывающую, откуда это происходит.

1 голос
/ 13 мая 2019

если ваш параметр id может быть нулевым, то вы должны сделать его обнуляемым типом и проверить перед запросом таблицы сотрудников

 public ActionResult Details(int? id)
    { 
     if(id != null)
      {                   
       EmployeeContext employeeContext = new EmployeeContext();
       Employee employee = employeeContext.Employees.Single(x =>x.EmployeeId == id);

            return View(employee);
     }
    else {
      return  SomeView();
     }

}
0 голосов
/ 13 мая 2019

Еще одна вещь: я бы не просто создал новый экземпляр вашего EmployeeContext. Вы можете получить это с помощью внедрения зависимостей.

public class MyController
{
    private readonly EmployeeContext _context;

    public MyController(EmployeeContext context)
    {
      _context = context;
    }

    ...
}

Ознакомьтесь с документацией Microsoft по этому вопросу:

https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext

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