【问题标题】:Passing multiple parameters to default action将多个参数传递给默认操作
【发布时间】:2014-12-10 19:33:19
【问题描述】:

我有一个只有一个控制器和一个动作的应用程序,但我想将两个值传递给该动作。我正在寻找的最终结果是一个看起来像这样的网址 http://www.example.com/parameter1/parameter2

所以我在想路由应该是这样的

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}/{name}",
        defaults: new { controller = "Home", action = "Index"}
    );

控制器看起来像这样

public class HomeController : Controller
{
    public ActionResult Index(string id, string name)
    {
        return View();
    }
}

但我显然错了,因为它不起作用。有谁知道在索引操作下是否有可能?

澄清一下,我希望在默认操作中有 2 个参数。我知道通过http://www.example.com/books/parameter1/parameter2/ 之类的东西是可能的,但我特别想要http://www.example.com/parameter1/parameter2/

【问题讨论】:

标签: c# asp.net-mvc


【解决方案1】:

要完全省略路由中的 controlleraction 占位符,您可以删除它们。 (不要将其从您的默认路由中删除,最好创建一个新路由并将其放置在默认路由附近)

routes.MapRoute(
        name: "Default",
        url: "{id}/{name}",
        defaults: new { controller = "Home", action = "Index"}
    );

此路由仅适用于来自 HomeControllerIndex 操作,但不适用于其他路由。

【讨论】:

  • 太棒了。非常感谢你的帮助。现在看来很明显了。
【解决方案2】:

如果id 是可选的,那么您的网址在未输入但名称为时会是什么样子?

/Home/Index//name 

这显然是无效的。

考虑使用查询字符串中的值而不是 URL 的一部分。

【讨论】:

  • 感谢您的回复。我已经修改了这个问题。参数不应该是可选的。
【解决方案3】:

我使用thisthis 来解决问题。 需要两条路由并确保这些路由高于默认 MVC 路由:

 routes.MapRoute(
        name: "with-name",
        url: "Home/{action}/{id}/{name}",
            defaults: new { controller = "Home", action = "Index"}
        //No Optional
        );

routes.MapRoute(
            name: "without-name",
            url: "Home/{action}/{id}",
            defaults: new { controller = "Home", action = "Index"}
        );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多