【问题标题】:ASP.NET - ActionResult parameter is coming back null always when passing string - why?ASP.NET - 传递字符串时,ActionResult 参数总是返回 null - 为什么?
【发布时间】:2020-06-12 01:29:44
【问题描述】:

我刚刚开始我的第一个 ASP.NET MVC 项目类型的项目,我正在创建一个详细信息页面,而不是传递模板 (int id),而是传递一个字符串。但是当我处于调试模式并在 URL 中输入时,“myString”为空。为什么这样?我是否必须在其他地方更改任何其他内容?

因此,如果我转到 URL 并输入以下内容:

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

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

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    在您的Global.asax.cs 文件中,您将默认映射以下路由:

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

    这意味着像http://localhost:2345/Bank/EmployeeDetails/3d34xyz 这样的url 将转到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 });
    

    如果 url 中没有传递值,这会将默认值 null 传递给 myString,但是使用您指定的 url,您将传递值 3d34xyz

    【讨论】:

    • 仅供参考,我确实在我的帖子中发现了一个小错误:如果您选择选项 2 并添加新路由,它应该比默认路由更具体,而不是正如我最初所说的那样,更general。这是因为 MVC 框架将按顺序遍历路由,并获取第一个匹配的路由 - 因此您要确保只有相关的 url:s 与新路由匹配。
    • 仅供参考 id = null 的人可能是 id = UrlParameter.Optional,具体取决于您的 .NET 版本
    • @MaximusPeters:谢谢 - 今天可能没有人会使用 null 是正确方法的版本 :)
    • 非常感谢@Tomas Lycken - 这也帮助我解决了我的问题。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      假设您没有修改默认路由(在您的 Global.asax.cs 中):

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

      该方法期望它被命名为“id”。

      【讨论】:

        【解决方案4】:

        myString的名称更改为id

        【讨论】:

          【解决方案5】:

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

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

          这解决了我的问题,希望对你有所帮助。

          这适用于 MVC 5。

          【讨论】:

          • 这种情况下不行,他的参数名不一样。
          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-09-12
            • 2019-09-18
            • 2014-09-02
            相关资源
            最近更新 更多