如何将MVC Route转换为Boolean类型的参数?

时间:2015-11-30 20:49:39

标签: asp.net-mvc model-view-controller controller routing

将路线段更改为布尔值

我的控制器中有一个简单的动作方法,并希望在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.
}

2 个答案:

答案 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可能更有意义,但这取决于您