一个可选参数必须是引用类型、可空类型或声明为可选参数。参数名称: parameters.

6

我正在使用 .net MVC 创建一个演示应用程序。

以下是来自我的 StudentController 的代码片段。

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");
}

来自RouteConfig的代码片段:

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

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

当我访问url 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.
但是当我访问url http://localhost:54976/student/Edit?StudentId=1 时,一切正常。
我对.net MVC不熟悉,请问有谁能给我建议吗?

请展示您的RouteMap设置。 - Justin Harvey
我已经在我的问题中添加了相同的内容。 - Rohit Waghela
3个回答

10

问题是由于您的路由配置引起的。

 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 }
        );

0

没有配置路由

  $.ajax({
                type: "POST",
                cache: false,
                url: '/Student/Edit?StudentId='1,
                dataType: 'json',
                ...
                ...
                ..

0

尝试在您的RouteConfig中添加此内容

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接