2

プロジェクトの場合、(残念ながら)正確なURLを一致させる必要があります。

したがって、問題はないと思いました。「MapRoute」を使用して、URLを目的のコントローラーと一致させることができます。しかし、私はそれを機能させることはできません。

このURLをマップする必要があります:

http://{Host}/opc/public-documents/index.html

Area: opc
Controller: Documents
Action: Index

別の例はマップすることです

http://{Host}/opc/public-documents/{year}/index.html

Area: opc
Controller: Documents
Action:DisplayByYear
Year(Parameter): {year}

私は自分の地域でこれを試しましたが、成功しませんでした(ocpAreaRegistration.cs):

context.MapRoute("DocumentsIndex", "opc/public-documents/index.html", 
    new {area="opc", controller = "Documents", action = "Index"});
context.MapRoute("DocumentsDisplayByYear", "opc/public-documents/{year}/index.html", 
    new {area="opc", controller = "Documents", action = "Action:DisplayByYear"});

しかし、404エラーが発生しました:(アクセスしようとすると、何が間違っているのでしょうか?

4

1 に答える 1

2

なぜこれを行う必要があるのか​​わかりませんが(レガシーアプリケーションから来ているとしか思えません)、これは私にとってはうまくいきます:

opcAreaRegistration.cs:

public override void RegisterArea(AreaRegistrationContext context)
{
    context.MapRoute(
        "opc_public_year_docs",
        "opc/public-documents/{year}/index.html",
        new { controller = "Documents", action = "DisplayByYear" }
    );

    context.MapRoute(
        "opc_public_docs",
        "opc/public-documents/index.html",
        new { controller = "Documents", action = "Index" }
    );

    context.MapRoute(
        "opc_default",
        "opc/{controller}/{action}/{id}",
        new { action = "Index", id = UrlParameter.Optional }
    );
}

コントローラ:

public class DocumentsController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    public ActionResult DisplayByYear(int year)
    {
        return View(year);
    }
}

これらのルートをglobal.asaxではなくエリアルーティングファイルに配置してください。

于 2012-08-06T12:30:38.860 に答える