Asp.net mvc 3 单击链接调用带有参数的ActionResult

Asp.net mvc 3 单击链接调用带有参数的ActionResult,asp.net-mvc-3,Asp.net Mvc 3,我有一个可以点击的Actionlink。它应该传递发票号 到我的控制器中名为Report的方法。我为此创建了一条路线,如图所示 在下面 目前,我无法使用传递的参数访问Report方法。没有什么 发生。我的页面在闪烁。 我错过了什么 @foreach (var objUser in Model.Invoices) { <tr>

我有一个可以点击的Actionlink。它应该传递发票号 到我的控制器中名为Report的方法。我为此创建了一条路线,如图所示 在下面 目前,我无法使用传递的参数访问Report方法。没有什么 发生。我的页面在闪烁。 我错过了什么

             @foreach (var objUser in Model.Invoices)
             {
                    <tr>            
                        <td><input type="checkbox" name="ckCheck" /></td>
                        <td>@objUser.invoiceDate</td>                 
                        <td>@Html.ActionLink(objUser.invoiceNumber, "Report", new { id = objUser.invoiceNumber }) </td>
                        <td>@objUser.accountNumber</td>
                        <td>@String.Format("{0:#,0.00}", objUser.amount)</td>
                        <td>@String.Format("{0:#,0.00}", objUser.amountDue)</td>
                    </tr>
             }


              public static void RegisterRoutes(RouteCollection routes)
                    {
                        var routeProvider = PluginLocator.GetPlugin<IRouteProvider>();
                        routes.MapRoute(null, "Invoice", new { controller = "Invoice", action = "Report" });
                        routeProvider.RegisterRoutes(routes); 
                    }


              public ActionResult Report(int id = 0)
                    {           
                        ReportClass rptH = new ReportClass();
                        rptH.FileName = Server.MapPath("/myreport/ourReport.rpt");
                        rptH.Load();
                        rptH.SetDatabaseLogon("zombie", "zombie29");
                        rptH.SetParameterValue("PARAM_REPORT_RUN_ID", id);
                        Stream stream = rptH.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
                        return File(stream, "application/pdf");
                    }
@foreach(模型发票中的变量objUser)
{
@发票日期
@ActionLink(objUser.invoiceNumber,“报告”,新的{id=objUser.invoiceNumber})
@objUser.accountNumber
@String.Format(“{0:#,0.00}”,objUser.amount)
@String.Format(“{0:#,0.00}”,objUser.amountDue)
}
公共静态无效注册表项(路由收集路由)
{
var routeProvider=PluginLocator.GetPlugin();
MapRoute(空,“发票”,新的{controller=“Invoice”,action=“Report”});
routeProvider.RegisterRoutes(路由);
}
公共行动结果报告(int id=0)
{           
ReportClass rptH=新的ReportClass();
rptH.FileName=Server.MapPath(“/myreport/ourReport.rpt”);
rptH.Load();
SetDatabaseLogon(“僵尸”,“僵尸29”);
rptH.SetParameterValue(“参数报告运行ID”,ID);
Stream=rptH.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
返回文件(流,“应用程序/pdf”);
}

以下是对我有效的方法

 routes.MapRoute(null, "Invoice/{action}", new { controller = "Invoice", 
                                                            action = "Index" });

通过引入“
Invoice/{action}”
实现了这一功能

您的页面上是否存在可能会劫持链接点击的javascript?你在FireBug的“网络”选项卡中看到了什么?单击链接时,是向服务器发送AJAX请求还是普通请求?链接上生成的
href
是什么?这就是我得到的全部内容,但我不认为报告方法是url的一部分。是的,这似乎是错误的。看起来您的路线定义有问题。很难说不知道你是如何宣布你的所有路线的。这就是我宣布我的路线的方式。MapRoute(空,“发票”,新的{controller=“Invoice”,action=“Report”});不,您似乎正在使用一些自定义的
PluginLocator.GetPlugin()
方法,这些方法完全不清楚它在做什么,也不清楚它来自哪里。也许它记录了一些我们无法从你的问题中了解的其他路线。如果不显示您的真实代码或至少一些您已经缩小了问题范围的代码片段,那么它将非常有帮助。