2017-07-12 112 views
1

我在.net MVC中創建一個演示應用程序。可選參數必須是引用類型,可爲空類型或聲明爲可選參數。參數名稱:參數`

下面是我的StudentController的代碼片段。從RouteConfig

public ActionResult Edit(int studentId) 
{ 
    var std = studentList.Where(s => s.StudentId == studentId).FirstOrDefault(); 
    return View(std); 
} 

[HttpPost] 
public ActionResult Edit(Student std) 
{ 
    //write code to update student 

    return RedirectToAction("Index"); 
} 

代碼片段:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

當我打的網址http://localhost:54977/student/Edit/1我得到以下異常。

The parameters dictionary contains a null entry for parameter 'studentId' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult Edit(Int32)' in 'MVC1.Controllers.StudentController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. Parameter name: parameters

但它工作正常,當我打網址http://localhost:54976/student/Edit?StudentId=1

我是.net MVC的新手。任何人都可以在這個建議我。

+0

顯示您的RouteMap設置請 –

+0

我在我的問題中添加了相同的內容.. –

回答

4

問題增加,這是由於你的路由配置。

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

http://localhost:54977/student/Edit/1中的第三個參數映射到{id}而不是studentId。

有兩個選項來解決這個問題:

1)更改參數名稱

public ActionResult Edit(int id) { 
     var std = studentList.Where(s => s.StudentId == id).FirstOrDefault(); 
     return View(std); 
    } 

2)添加新的路線編輯:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.MapRoute(
      "EditStudent", 
      "Edit/{StudentId}", 
      new { controller = "Student", action = "Edit" }); 
     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
+1

謝謝@Jayakrishnan。有效 ..:) –

0

嘗試在RouteConfig

routes.MapRoute(
       "Student",           // Route name 
       "Edit/{StudentId}",       // URL with parameters 
       new { controller = "Student", action = "Edit" } // Parameter defaults 
      );