Asp.net mvc 如何将MVC路由转换为布尔类型的参数?
将管段更改为布尔值 我的控制器中有一个简单的操作方法,当url中传递字符串“Company”时,我希望将布尔值传递给我的操作Asp.net mvc 如何将MVC路由转换为布尔类型的参数?,asp.net-mvc,model-view-controller,controller,routing,Asp.net Mvc,Model View Controller,Controller,Routing,将管段更改为布尔值 我的控制器中有一个简单的操作方法,当url中传递字符串“Company”时,我希望将布尔值传递给我的操作 public ActionResult DoSomething(Boolean ? isCompany) { } 我想这样称呼它。 http://mysite/Feature/Configure/Company 因此,基本上,当url中有“Company”时,将isCompany传递为true布尔值 这可能吗 根据下面的答案,我认为我应该使用以下映射 routes.
public ActionResult DoSomething(Boolean ? isCompany) { }
我想这样称呼它。
http://mysite/Feature/Configure/Company
因此,基本上,当url中有“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.
}
不是直接的,你必须像这样处理它:
public ActionResult DoSometing(string foo)
{
var isCompany = foo == "Company";
}
真正回到你想要实现的目标上来。 对这样的输入进行检查,表明您将计划在逻辑中使用分叉,并可能显示不同的内容/视图 更简单的选择是让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)。
为此,请从配置中删除功能configure
路由
然后在控制器和操作上包括以下内容:
[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
可能更有意义,但这取决于您您是否有其他情况下该路径可能匹配?i、 e您可能会有/feature/configure/user
或者仅仅是/feature/configure/
?我修改了代码,以反映对需要具有多个值的任何人的公司变量的更多关注。