web-dev-qa-db-ja.com

MVC:パラメーターディクショナリに、nullを許可しない型 'System.Int32'のパラメーター 'k'のnullエントリが含まれています

MVCが初めてです。 My Applicationでは、Mydatabaseからデータを取得しています。しかし、アプリケーションを実行すると、このようなエラーが表示されますこれは私の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 Modelクラス

 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
42
Amit Kumar

次のように定義されているデフォルトルートを使用しているようです。

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

そのルートの重要な部分は{id}ピースです。アクションメソッドを見ると、パラメーターはkではなくidです。 routeパラメーターと一致するように、アクションメソッドをこれに変更する必要があります。

// 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>
75
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();
    }
7
Reza

間違った形式のクエリ文字列を送信したため、このエラーに直面しました

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

Query Stringまたは渡されたパラメーターが正しい形式であることを確認してください

3

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