Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何将MVC路由转换为布尔类型的参数?_Asp.net Mvc_Model View Controller_Controller_Routing - Fatal编程技术网

Asp.net mvc 如何将MVC路由转换为布尔类型的参数?

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.

将管段更改为布尔值

我的控制器中有一个简单的操作方法,当url中传递字符串“Company”时,我希望将布尔值传递给我的操作

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/
?我修改了代码,以反映对需要具有多个值的任何人的公司变量的更多关注。