it-swarm.com.de

MVC: Das Parameterwörterbuch enthält einen Null-Eintrag für den Parameter 'k' des nicht nullfähigen Typs 'System.Int32'.

Ich bin neu bei MVC. In meiner Anwendung rufe ich die Daten aus der Datenbank ab. aber wenn ich meine Anwendung starte, wird Error Like This angezeigt. Dies ist meine 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

dies ist mein web.config-Dateicode

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

dies ist meine Employee Model Class (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; }

    }

Meine EmployeeContext.cs-Modellklasse

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

meine EmployeeController.cs

 public ActionResult DetailsData(int k)
        {

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

und meine Sicht 

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

Es scheint, dass Sie die Standardroute verwenden, die wie folgt definiert ist:

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

Der Schlüsselteil dieser Route ist das {id}-Stück. Wenn Sie sich Ihre Aktionsmethode anschauen, ist Ihr Parameter k anstelle von id. Sie müssen Ihre Aktionsmethode dahingehend ändern, dass sie mit dem Routenparameter übereinstimmt:

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

Wenn Sie Ihren Parameter als k belassen möchten, ändern Sie die URL wie folgt:

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

Sie scheinen auch ein Problem mit Ihrer Verbindungszeichenfolge zu haben. In Ihrer web.config müssen Sie Ihre Verbindungszeichenfolge so ändern (wird von haim770 in einer anderen Antwort bereitgestellt, die er gelöscht hat):

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

Es scheint, dass Ihre Aktion k benötigt, aber ModelBinder kann sie nicht finden (aus Formular, Daten anfordern oder anzeigen oder ..) Ändern Sie Ihre Aktion folgendermaßen:

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

Ich bin diesem Fehler begegnet, weil ich die Abfragezeichenfolge mit falschem Format gesendet habe

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

stellen Sie daher sicher, dass Ihr Query String oder der übergebene Parameter im Format right

1

Ich bin auch neu bei MVC und ich habe den gleichen Fehler erhalten und festgestellt, dass es nicht die richtige routeValues in der Index-Ansicht oder in der Ansicht ist, die vorhanden ist, um alle Daten anzuzeigen.

Es war wie unten  

<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>

Ich änderte es wie unten gezeigt und fing an richtig zu arbeiten.

<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>

Grundsätzlich kann dieser Fehler auch auf eine falsche Navigation zurückzuführen sein.

0
Manoj Naik