Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.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 Asp.Net MVC 3中相同路由的2个操作_Asp.net Mvc_Asp.net Mvc 3_Routing_Asp.net Mvc Routing - Fatal编程技术网

Asp.net mvc Asp.Net MVC 3中相同路由的2个操作

Asp.net mvc Asp.Net MVC 3中相同路由的2个操作,asp.net-mvc,asp.net-mvc-3,routing,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc 3,Routing,Asp.net Mvc Routing,我将路线定义为 routes.MapRoute( "Company", // Route name "Company/{companyname}", // URL with parameters new { controller = "Company", action = "CompanyDetail", companyname = UrlParameter.Optional } // Parameter defaults

我将路线定义为

routes.MapRoute(
            "Company", // Route name
            "Company/{companyname}", // URL with parameters
            new { controller = "Company", action = "CompanyDetail", companyname = UrlParameter.Optional } // Parameter defaults
        );

现在的问题是,如果我现在向公司控制器发出任何请求,并将参数传递给
CompanyDetail
方法,我已经执行了此路由,但在一种情况下,我不想发送给此方法,我想将控件发送给另一个操作
CallCompany
。如何解决这个问题,请注意,我还需要运行这两种类型的请求

您可能应该看看mvc。这将使您能够将类似url上的请求转发到不同的操作,具体取决于您可以通过编程设置的不同参数。
比如说

routes.MapRoute(
    "Product",
    "Product/{productId}",
    new {controller="Product", action="Details"},
    new {productId = @"\d+" }
 );
这只会转到控制器:产品id中的产品和操作详细信息为int
在您的情况下,您必须在regex中定义模式,对于该模式,请求应转到一个路由,并将第二个路由放在该路由旁边

因此,每一个符合此路由约束的请求都将自动由下一个请求处理。

正如我理解您的问题,您希望实现以下行为:

有一组公司名称(例如,“test”),它们与URL相对应

你的主人/公司/测试

应将其发送至呼叫公司

其他URL(如您的主机/公司/另一家公司)应路由到CompanyDetail

我认为,最好的方法是在CompanyDetail方法中进行重定向

    public ActionResult CallCompany(string companyname)
    {
        return View();
    }
    public ActionResult CompanyDetail(string companyname)
    {
        IEnumerable<string> myCompanies = GetSpecialCompany();
        if (myCompanies.Contains(companyname))
        {
            return RedirectToAction("CallCompany", new { companyname = companyname });
        }
        return View();
    }

    private IEnumerable<string> GetSpecialCompany()
    {
        throw new NotImplementedException();
    }
public ActionResult调用公司(字符串companyname)
{
返回视图();
}
公共操作结果公司详细信息(字符串公司名称)
{
IEnumerable myCompanies=getSpecialCompanies();
if(myCompanies.Contains(companyname))
{
返回重定向操作(“CallCompany”,new{companyname=companyname});
}
返回视图();
}
私有IEnumerable GetSpecialCompany()
{
抛出新的NotImplementedException();
}

您可以在控制器方法中进行设置:

public ActionResult CompanyDetail(字符串companyname)
{
如果(条件)
{
返回RedirectToAction(“ActionName”,new{companyname=companyname});
}
返回视图();
}

你能提供一个url,该url应该被调用为Company action/Company/Foo。。。这里Foo是参数,我希望它转到/Company/CallCompany,但由于默认路由,它转到/Company/companydetaily。您可以向我们显示所有路由吗?另外,您不想发送到此方法的“一个条件”是什么?