MVC: словарь параметров содержит нулевую запись для параметра "k" типа, не имеющего значения NULL, "System.Int32"
Я новичок в MVC
. В моем приложении я получаю данные из базы данных. но когда я запускаю свое приложение, он показывает 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; }
}
My EmployeeContext.cs Класс модели
public class EmployeeContext:DbContext
{
public DbSet<Employee> Employees { get; set; }
}
my 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
Ответы
Ответ 1
Похоже, вы используете маршрут по умолчанию, который определяется следующим образом:
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>
Ответ 2
Кажется, что вашему действию требуется 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();
}
Ответ 3
Я столкнулся с этой ошибкой, потому что я отправил строку запроса с неправильным форматом
http://localhost:56110/user/updateuserinfo?Id=55?Name=Basheer&Phone=(111)%20111-1111
------------------------------------------^----(^)-----------^---...
--------------------------------------------must be &
убедитесь, что ваш Query String
или переданный параметр в правильном формате
Ответ 4
Я также новичок в 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>
В принципе, эта ошибка также может возникнуть из-за неправильной навигации.