it-swarm.com.ru

MVC: словарь параметров содержит пустую запись для параметра 'k' не обнуляемого типа 'System.Int32'

Я новичок в MVC. В моем приложении я получаю данные из базы Myd. но когда я запускаю свое приложение, оно показывает Error Like This это мой URL 

http://localhost:7317/Employee/DetailsData/4



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

это мой код файла web.config

<connectionStrings>
  <add name="EmployeeContext" connectionString="Server=.;Database=mytry;integrated security=true; ProviderName=System.Data.SqlClient"/>
</connectionStrings>

это мой класс модели для сотрудников (Employee.cs)

[Table("emp")]    /* to map tablename with our class name*/
    public class Employee
    {
        public int EmpId { get; set; }
        public string Name { get; set; }
        public string Gender { get; set; }
        public string City { get; set; }

    }

Мой Модель EmployeeContext.cs

 public class EmployeeContext:DbContext
    {
        public DbSet<Employee> Employees { get; set; }
    }

мой EmployeeController.cs

 public ActionResult DetailsData(int k)
        {

            EmployeeContext Ec = new EmployeeContext();
            Employee emp = Ec.Employees.Single(X => X.EmpId == k);           
            return View(emp);
        }

и мой взгляд 

<h2>DetailsData</h2>
@Model.Name<br />
@Model.City<br />
@Model.Gender<br />
@Model.EmpId
41
Amit Kumar

Похоже, что вы используете маршрут по умолчанию, который определяется как это:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

Ключевой частью этого маршрута является фрагмент {id}. Если вы посмотрите на ваш метод действия, ваш параметр будет k вместо id. Вам нужно изменить метод действия на этот, чтобы он соответствовал параметру маршрута:

// change int k to int id
public ActionResult DetailsData(int id)

Если вы хотите оставить свой параметр как k, то вы бы изменили URL на:

http://localhost:7317/Employee/DetailsData?k=4

У вас также, кажется, есть проблема со строкой подключения. В вашем файле web.config вам нужно изменить строку подключения на эту (предоставленную haim770 в другом ответе, который он удалил):

<connectionStrings>
  <add name="EmployeeContext"
       connectionString="Server=.;Database=mytry;integrated security=True;"
       providerName="System.Data.SqlClient" />
</connectionStrings>
73
Dismissile

Похоже, что вашему действию требуется k, но ModelBinder не может его найти (из формы, или запросить, или просмотреть данные, или ..) Измените ваше действие на следующее:

public ActionResult DetailsData(int? k)
    {

        EmployeeContext Ec = new EmployeeContext();
        if (k != null)
        {
           Employee emp = Ec.Employees.Single(X => X.EmpId == k.Value);

           return View(emp);
        }
        return View();
    }
5
RezaRahmati

Я столкнулся с этой ошибкой, потому что я отправил строку запроса с неверным форматом

http://localhost:56110/user/updateuserinfo?Id=55?Name=Basheer&Phone=(111)%20111-1111
------------------------------------------^----(^)-----------^---...
--------------------------------------------must be &

поэтому убедитесь, что ваш Query String или переданный параметр в правильном формате

1
Basheer AL-MOMANI

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

Это было как ниже  

<td>
            @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
        </td>

Я изменил его на как показано ниже и начал работать должным образом.

<td>
            @Html.ActionLink("Edit", "Edit", new { EmployeeID=item.EmployeeID }) |
            @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
        </td>

В основном эта ошибка также может возникнуть из-за неправильной навигации.

0
Manoj Naik