假设我有一个名为User的控制器,我有一个索引ActionResult
,然后是一个名为SetUserInfo的辅助ActionResult
。示例如下:
public ActionResult Index(int id)
{
var enviorment = Zen.Components.Environment.GetEnvironmentByID(id);
return View(settingsViewModal);
}
//Second action
public ActionResult SetSite(int id, int siteID)
{
var enviorment =
Zen.Components.Environment.GetEnvironmentByID(
new EnviornmentQuery() {EnviormentID = id, SiteID = siteID);
return View(enviorment.Site);
}
由于网址"设置?id = 1"触发ActionResult"索引",我可以获得"设置?id = 1& siteID = 133"然后让控制器知道它必须触发ActionResult" SetSite"基于它给出的参数,或者我必须在第一个ActionResult中使它们成为可选项,或者我认为这一切都是错误的。路线映射是我需要一分钟才能完全获得的。我知道它可以被调用如下" Settings / SetSite?id = 1& siteID = 133",但是想知道我是否可以做我之前的例子?如果是这样,处理它是不是一种坏方法?
答案 0 :(得分:4)
您可以为其映射路线:
routes.MapRoute(
name: "SetSiteRoute",
url: "{controller}/{action}/{id}/{siteID}",
defaults: new { controller = "Settings", action = "SetSite" }
// Important part ^^^^^^^
);
确保将其置于默认路线之上,以使其优先(路线按顺序处理)。
这将允许:www.site.com/Settings/1/500
其中1是id
,500是siteID
。
答案 1 :(得分:1)
虽然不是你可能正在寻找的答案..
首先,您不能以这种方式映射您的路线。路线不能包含?虽然你可以使用另一种方法来使用类似
之类的东西来调用你的路线/Settings/{id}/{siteId}
使用以下
/Settings?id={id}&siteID={siteId}
不能映射为路线。但是,您可以轻松地将网站ID属性添加到索引操作,例如。
public ActionResult Index(int id, int? siteID)
{
if (siteID.HasValue)
return SetSite(id, siteID);
return null;
}
//Second action
public ActionResult SetSite(int id, int siteID)
{
return null;
}
我知道这不是你正在寻找的东西,但是你可以获得相同的结果而不必乱用你的路线和网址。 (注意我只是返回null以便编译)。
干杯。