首页 > 解决方案 > 如何从mvc中的cshtml视图将参数传递给控制器

问题描述

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.netasp.net-mvcentity-framework-6asp.net-mvc-routing

解决方案


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

首先,如果您想像这样使用 url 的路由,{controller}/{action}/{id}请将控制器操作中的参数名称从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 })

请参阅 ActionLink文档


推荐阅读