0

我将路线定义为

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

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

4

3 回答 3

2

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

public ActionResult CompanyDetail(string companyname)
{
    if (condition)
    {
        return RedirectToAction("ActionName", new { companyname = companyname});
    }
    return View();
}
于 2012-07-11T10:23:19.520 回答
0

您可能应该查看 mvc路由约束。这将使您能够将类似 url 上的请求转发到不同的操作,具体取决于您可以以编程方式设置的 uopn 不同参数。
例如

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

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

于 2012-07-11T07:20:11.333 回答
0

据我了解您的问题,您希望实现以下行为:

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

你的主机/公司/测试

它们应该被路由到 CallCompany。

其他 URL(例如 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();
    }
于 2012-07-11T07:30:30.020 回答