asp mvc路由有两个可选参数

0we*_*101 6 asp.net parameters asp.net-mvc routing

嗨如果两个参数都是可选的,我如何映射网址../Companies/Results/value/id

公司是控制器,结果是动作,值和id是可选参数.在我的表单上是一个值的文本框和一个id的选择列表.用户可以选择两个或每个中的一个来搜索.尝试过这样的事情,但是当其中一个可选参数(例如值)丢失时无法处理,例如../Companies/Results//id

        routes.MapRoute(
            "Company+Profession", // Route name
            "{action}/{value}/{profId}", // URL with parameters
            new { controller = "Companies", action = "Index", value = UrlParameter.Optional, profId = UrlParameter.Optional } // Parameter defaults
        );

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

tva*_*son 9

您不能拥有包含两个可选参数的路由,由于您描述的问题,只有最后一个参数可以精确选择.我建议你有一个默认参数value,比如byid,当这个人选择一个职业时使用它.

我假设你是通过javascript构建URL,因为使用GET表单操作会导致参数名称被添加到URL.在这种情况下,当文本框为空时,只需插入默认的byid.

更新您的路由以包含默认值,以便您生成的任何网址都可以使用.有关处理生成具有两个"可选"参数的URL的替代方法,请参阅Phil Haack 关于此的博客文章.

// used when both parameters are specified
routes.MapRoute(
        "Company+Profession", // Route name
        "{action}/{value}/{profId}", // URL with parameters
        new { controller = "Companies", action = "Index", value ="byid", profId = UrlParameter.Optional } // Parameter defaults
);
Run Code Online (Sandbox Code Playgroud)


Mil*_*ric 0

我不确定,因为我现在不知道在哪里尝试这个,但这是我的建议

routes.MapRoute(
            "Company+Profession", // Route name
            "Companies/{action}/value-{value}/id-{profId}", // URL with parameters
            new { controller = "Companies", action = "Index", value = UrlParameter.Optional, profId = UrlParameter.Optional } // Parameter defaults
        );
Run Code Online (Sandbox Code Playgroud)