ASP.NET - ActionResult参数在传递字符串时总是返回null - 为什么?

时间:2009-05-11 19:21:33

标签: asp.net asp.net-mvc

我几乎没有开始使用ASP.NET MVC项目类型的第一个项目,我正在创建一个Details页面,而不是传递模板化(int id),我想传递一个字符串。但是当我处于调试模式并在URL中输入时,“myString”为空。为什么这样?我还需要改变别的什么吗?

所以,如果我转到URL并输入:

http://localhost:2345/Bank/EmployeeDetails/3d34xyz

public ActionResult EmployeeDetails(string myString) // myString is null
{
     return View();
}

6 个答案:

答案 0 :(得分:36)

Global.asax.cs文件中,默认情况下会映射以下路由:

routes.mapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional });

这意味着,http://localhost:2345/Bank/EmployeeDetails/3d34xyz这样的网址将转到Bank控制器,EmployeeDetails操作,并将值3d34xyz传递给名为id的参数。传递一个字符串是完全正常的,但为了使其工作,你有两个选择:

1)在操作方法中将变量重命名为id

public ActionResult EmployeeDetails(string id) { ... }

2)添加另一个匹配字符串所需名称的路径。确保使其比默认路由更具体,并将放在 Global.asax.cs文件中的默认路由之前。

routes.mapRoute(
    "BankEmployeeDetails"
    "Bank/EmployeeDetails/{myString}"
    new { controller = "Bank", action = "EmployeeDetails", myString = UrlParameter.Optional });

如果网址中未传递任何值,则会将默认值null传递给myString,但如果您指定了网址,则会传递值3d34xyz

答案 1 :(得分:4)

假设您尚未修改默认路由(在Global.asax.cs中):

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

该方法希望将其命名为“id”。

答案 2 :(得分:3)

如果您使用的是默认路由表,请将myString重命名为id

答案 3 :(得分:2)

myString的名称更改为id

答案 4 :(得分:0)

我遇到了同样的问题,您只需要在页面中提供详细信息超链接的ID(在此处的银行页面中)

 @Html.ActionLink("Details", "Details", new { id=""}) 

这解决了我的问题,希望它可以帮助你。

这适用于MVC 5.

答案 5 :(得分:0)

当您尝试了所有这些选项,但仍然返回null时,请为Visual Studio完全重新启动。最终这对我有所帮助。