Asp.Net MVC 3中针对相同路由的2个操作

时间:2012-07-11 06:36:33

标签: 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
        );

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

3 个答案:

答案 0 :(得分:1)

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

public ActionResult CompanyDetail(string companyname)
{
    if (condition)
    {
        return RedirectToAction("ActionName", new { companyname = companyname});
    }
    return View();
}

答案 1 :(得分:0)

你应该探讨mvc route constraints。这将使您能够根据您可以以编程方式设置的不同参数将simillar网址上的请求转发到不同的操作。
例如

routes.MapRoute(
    "Product",
    "Product/{productId}",
    new {controller="Product", action="Details"},
    new {productId = @"\d+" }
 );

这只会转到控制器:产品和操作产品ID中的详细信息是一个int 在您的情况下,您将必须在正则表达式中定义模式,请求应该转到一条路线并将第二条路线放在此旁边 因此,每一个适合该路线约束的请求都将自动被下一个请求处理。

答案 2 :(得分:0)

当我理解你的问题时,你想要实现以下行为:

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

对应

yourhost /公司/测试

他们应该被路由到CallCompany。

其他网址(例如yourhost / Company / another_company)应该路由到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();
    }