【问题标题】:How to pass a parameter to a controller from a cshtml view in mvc如何从mvc中的cshtml视图将参数传递给控制器
【发布时间】:2020-01-26 18:28:36
【问题描述】:

net MVC 4 我遵循了关于如何将参数从 mvc 中的 cshtml 视图传递给控制器​​的 microsoft 教程,但我不断收到一个错误消息,提示找不到资源。如果我在 cshtml 中放置了一个断点,我实际上可以看到 Id 的值,但它根本没有击中控制器似乎找不到它

描述:HTTP 404。您正在查找的资源(或其依赖项之一)可能已被删除,并有其名称 已更改,或暂时不可用。请查看以下内容 URL 并确保拼写正确。

请求的 URL:/UploadLogs/DisplayUploadedFileContents/89

这是我的控制器方法

public class DisplayUploadedFileController : Controller
{
    private MarketingDBEntitiesModel db = new MarketingDBEntitiesModel();
    // GET: DisplayUploadedFile
    public ActionResult DisplayUploadedFileContents(int UploadId)
    {
        return View(db.marketingdbclients_dataTable.OrderByDescending(r => r.ClientId).Where(r => r.ClientDataId < 1000).ToList());
       // return View();.
    }
}

我在cshtml中的一行

<td>    
    @*@Html.ActionLink("Details", "Details", new { id = item.UploadId })*@

    @Html.ActionLink("Details", "DisplayUploadedFileContents", new { id = item.UploadId })    
</td>

我的路线配置

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

【问题讨论】:

    标签: c# asp.net asp.net-mvc entity-framework-6 asp.net-mvc-routing


    【解决方案1】:

    进行一些更改应该可以使其正常工作。

    首先,如果你想使用{controller}/{action}/{id}这样的url的路由,请将控制器操作中的参数名称从UploadId更改为id

    public ActionResult DisplayUploadedFileContents(int id)
    

    接下来,您似乎正在从不同的控制器进行链接,因为在错误中请求的 URL 是 /UploadLogs/DisplayUploadedFileContents/89(注意 UploadLogs 不是 DisplayUploadedFile)。

    从属于不同控制器的视图链接到 DisplayUploadedFile 控制器,您将需要使用此重载并获取 5 个参数:

    @Html.ActionLink("Display File Contents", "DisplayUploadedFileContents", "DisplayUploadedFile", 
                         null, new { id = item.UploadId })
    

    但是,如果您从同一个控制器中的视图访问控制器,您应该能够使用此重载 ActionLink 并获取 3 个参数:

    @Html.ActionLink("Display File Contents", "DisplayUploadedFileContents", new { id = item.UploadId })
    

    请参考ActionLinkdocumentation

    【讨论】:

      【解决方案2】:
      url: "{controller}/{action}/{id}
      

      您没有遵守路由配置。试试:

      @Html.ActionLink("DisplayUploadedFile", "DisplayUploadedFileContents", new { UploadId = item.UploadId })
      

      【讨论】:

      • 谢谢@sander,你是对的,没有遵循约定,所以我已经将它们整理出来,但我仍然遇到同样的错误。我认为还缺少其他东西
      • 我编辑了参数名称另外,您不需要映射路线。只需遵循默认路由约定即可。我认为你在 routeconfig 中映射这条路线也有干扰。
      • @Html.ActionLink("DisplayUploadedFile", "DisplayUploadedFileContents", new { UploadId = item.UploadId }) 这就是我现在所拥有的,所以我不确定我在这里缺少什么
      • 删除您为 DisplayUploadedFileContents 编写的 mapRoute 并在 routeconfig.cs 中保留(或恢复)原始路由配置
      【解决方案3】:
      @Html.ActionLink("DisplayUploadedFile", "DisplayUploadedFileContents", new { UploadId = item.UploadId}, null )
      

      您需要“htmlArgument”的参数

      请参考:HTML.ActionLink method

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-23
        • 2022-10-31
        • 1970-01-01
        • 2012-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多