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
次のように定義されているデフォルトルートを使用しているようです。
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>
アクションには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();
}
間違った形式のクエリ文字列を送信したため、このエラーに直面しました
http://localhost:56110/user/updateuserinfo?Id=55?Name=Basheer&Phone=(111)%20111-1111
------------------------------------------^----(^)-----------^---...
--------------------------------------------must be &
Query String
または渡されたパラメーターが正しい形式であることを確認してください
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>
基本的にこのエラーは、不適切なナビゲーションも原因で発生する可能性があります。