将路线段更改为布尔值
我的控制器中有一个简单的动作方法,并希望在url中传递字符串“Company”时将布尔值传递给我的动作。
public ActionResult DoSomething(Boolean ? isCompany) { }
我想这样称呼它。
http://mysite/Feature/Configure/Company
所以基本上,当“公司”在网址中时,然后将 isCompany 传递为 true 布尔值。
这可能吗?
根据下面的答案,我想我应该使用以下映射。
routes.MapRoute(
name: "FeatureConfigure",
url: "Feature/Configure/{company}",
defaults: new { controller = "Feature", action="Configure",
company = UrlParameter.Optional }
);
public ActionResult Configure(String company) {
var isCompany = company == "Company";
// maybe use a switch if there are multiple values company can be
// and probably rename the variable to something more generic.
}
答案 0 :(得分:0)
不是直接的,你必须像:
一样处理它public ActionResult DoSometing(string foo)
{
var isCompany = foo == "Company";
}
答案 1 :(得分:0)
真的回到了你想要实现的目标。 对这样的输入进行检查后,建议您计划在逻辑中使用分叉,并可能显示不同的内容/视图。
更简单的选择是让MVC处理它并保持代码清洁。
选项1:
将路线的{company}
部分更改为{action}
并在行动级别分叉您的逻辑。
routes.MapRoute(
name: "FeatureConfigure",
url: "Feature/Configure/{action}",
defaults: new { controller = "Feature", action="Index" }
);
public ActionResult Company() {
// Do company stuff
}
public ActionResult Branch() {
// Do branch stuff
}
选项2:
与上面相同但使用路由属性(假设您使用的是MVC5)。
为此,请从配置中删除FeatureConfigure
路由。
然后在控制器和操作中包含以下内容:
[RoutePrefix("features/configure")]
public class FeatureController : Controller
{
....
[Route("{type:regex(company)}")]
public ActionResult Company()
{
// do company stuff
}
[Route("{type:regex(branch)}")]
public ActionResult Branch()
{
// do branch stuff
}
...
}
注意:在任何一种情况下,将FeatureController
重命名为ConfigureContoller
可能更有意义,但这取决于您