【问题标题】:How to specify controller in ActionLink html helper in C#如何在 C# 中的 ActionLink html 助手中指定控制器
【发布时间】:2011-07-27 09:50:47
【问题描述】:

我有一个使用 C#RazorASP.NET MVC3 中开发的 Web 应用程序。

我想通过使用 ActionLink HTML 帮助器来调用特定 Controller 的特定 Action Method。我知道 ActionLink 的第二个参数指定要从 Default route 调用的 Action Method,这是我的 Global.asax 文件中唯一的一个:

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

我想从 Home 控制器而不是 Index 调用 Download 操作方法。这不起作用:

@Html.ActionLink("Presentation", "Download", "Home", new { topicId = topic.TopicId } )

它需要一个 Object 类型作为第三个参数,但我在网上找不到任何示例。

调用特定的 Controller/ActionMethod 需要哪些步骤?我应该在我的 Global.asas 文件中创建另一个路由吗?

谢谢

【问题讨论】:

    标签: c# asp.net-mvc-3 actionlink routevalues


    【解决方案1】:

    试试这个:

    @Html.ActionLink("Download", "Download", new { controller = "Home",  Id = topic.TopicId });
    

    第三个参数object:routeValues,在Asp.net MVC中用作字典。 Phil Haacked blogged 关于使用对象作为路由值的决定。

    更新
    您的重载函数不起作用,因为您正在调用this method字符串也是对象。因此,您将 "Home" 作为 routeValues 传递,将 new { topicId = topic.Id} 作为 htmlAttributes 传递。 :)

    【讨论】:

    • 感谢您的回答。它是 MVC3 中的新东西吗?在 MVC2 中,我记得它是我尝试做的(我的问题中的重载)
    • AFAIK,在 MVC2 中应该是一样的。 :)
    • 如果当前控制器中有同名的动作似乎不起作用
    【解决方案2】:

    this 是您需要的重载吗?您将需要 html 属性的第 5 个参数。

    @Html.ActionLink("Presentation", "Download", "Home", new { topicId = topic.TopicId }, new { name="Download" )
    

    【讨论】:

    • 感谢您的回答。为什么要使用 html 属性?您的重载只会指定一个带有“下载”值的 HTML 名称属性(。除了对绑定有用之外,我看不出使用它的原因
    • 因为这是支持指定您想要的所有参数的重载。您可能只能使用 null 作为最终参数,但我不确定,所以我只输入了 null。如果不给它一个空字典。
    猜你喜欢
    • 1970-01-01
    • 2011-06-07
    • 2020-10-11
    • 2020-10-30
    • 1970-01-01
    • 2011-01-07
    • 2011-09-23
    • 2017-01-07
    • 1970-01-01
    相关资源
    最近更新 更多