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

私があなたの質問を理解したように、あなたは次の振る舞いを実現したいと思っています:

会社名のセット(たとえば、「テスト」)があり、それらはURLに対応します

yourhost / Company / test

それらは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 に答える
0

おそらくMVCルートの制約を調べる必要があります。これにより、プログラムで設定できるuopnのさまざまなパラメータに応じて、類似のURLのリクエストをさまざまなアクションに転送できます。
例えば

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

これはコントローラーにのみ送信されます。製品IDの製品とアクションの詳細はint
です。この場合、要求が1つのルートに移動し、この隣に2番目のルートを配置する必要がある正規表現のパターンを定義する必要があります。これにより、
すべての要求が自動的に行われます。このルートの制約に適合している場合は、次のルートで処理されます。

于 2012-07-11T07:20:11.333 に答える