0

我是.Net 的新手。我的第一个项目接近尾声,我遇到了一个困扰我的小问题。我正在使用 MVC 3、Razor、C# 和 VisualStudio 2010。

以下是我用于将用户重定向到不同 RDLC 报告的 Razor 代码:

@Html.ActionLink("Length of stay for all data packages - summary", "RptLngthStay", "Reports", new { @class = "link" })<br />
@Html.ActionLink("Packages denied registration by WHS reviewers", "RptPkgsDenied", "Reports", new { @class = "link" })<br />
<...>

它生成以下 HTML:

<a class="link" href="/reg_pkgs/Reports/RptLngthStay?Length=7">Length of stay for all data packages - summary</a><br />
<a class="link" href="/reg_pkgs/Reports/RptPkgsDenied?Length=7">Packages denied registration by WHS reviewers</a><br />
<...>

我的问题是,参数“Length=7”从何而来?没有一个控制器需要参数,更不用说一个名为“长度”的控制器了。它不会影响我的任何代码的运行方式,但在地址栏中看到它让我感到困扰。

以下是我的 Global.asax.cs 文件中的路线:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "PackageTrack", action = "TrackSearch", id = UrlParameter.Optional } // Parameter defaults
    );
}

它们只是使用新项目创建的默认路由。

非常感激任何的帮助。

4

2 回答 2

2

您使用了错误的重载,Html.ActionLink其签名为(HtmlHelper, String, String, Object, Object)

其中第三个参数"Reports"被解释为 rootvalues 对象,并且框架试图获取它的属性。并且字符串"Reports"有一个属性 Lenght 等于 7。

您需要的是带有签名的重载(HtmlHelper、String、String、String、Object、Object)

将您的代码更改为:

@Html.ActionLink("Link text", "RptLngthStay", "Reports", null,  new { @class = "link" })<br />
@Html.ActionLink("Link text", "RptPkgsDenied", "Reports", null, new { @class = "link" })<br />

注意nulls 作为第四个参数。

于 2012-06-04T20:35:43.617 回答
1

你应该使用

@Html.ActionLink("Packages denied registration by WHS reviewers", "RptLngthStay", "Reports", null, new { @class = "link" })

或者

@Html.ActionLink("Packages denied registration by WHS reviewers", "RptLngthStay", "Reports", new {}, new { @class = "link" })

HTML 帮助程序需要具有路由数据值,以便它可以区分 routedata 和 htmlAttribute 属性。

于 2012-06-04T20:35:57.930 回答