2

皆さん、こんにちは:私は .net mvc3 アプリケーションに取り組んでいます。これが私のコントローラーとアクションです:

public class Foo_Bar : Controller
{
     public ViewResult Foo_Bar()        
    {

        return View();
    }
}

そして、私の対応するビューファイルは次のとおりです: Foo_Bar.cshtml

今、私の質問は次のとおりです。私は次のような URL を持っています: www.mystite.com/foo-bar/foo-bar ですが、この URL は Foo_Bar/Foo_Bar コントローラーとアクションを呼び出すことができません。 /foo_bar/foo_bar .

ここで、ルート システムがコントローラーとアクションをマッピングする前に、「-」を「_」に置き換える必要があります。routes.MapRoute() で実行できますか? 誰か助けてください。よろしくお願いします!ps:スタックオーバーフローで質問するのは初めてです:)

4

2 に答える 2

2

RouteHandlerの値を変更するカスタムを作成できます。まず、次のように RouteHandler を作成します。{action}{controller}

using System.Web.Mvc;  
using System.Web.Routing;  

public class MyRouteHandler : IRouteHandler  
{  
    public IHttpHandler GetHttpHandler(RequestContext requestContext)  
    {  
        var routeData = requestContext.RouteData;  
        var controller = routeData.Values["controller"].ToString(); 
        routeData.Values["controller"] = controller.Replace("-", "_");  
        var action = routeData.Values["action"].ToString();  
        routeData.Values["action"] = action.Replace("-", "_");  
        var handler = new MvcHandler(requestContext);  
        return handler;  
    }  
}  

次に、デフォルト ルートを次のように変更します。

routes.Add("Default",  
    new Route("{controller}/{action}/{id}",  
        new RouteValueDictionary(  
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }),  
            new MyRouteHandler() 
        ) 
    );  
); 

このルートによって要求が満たされると、RouteHandler はダッシュをアンダーバーに変更します。

于 2011-10-10T03:40:53.583 に答える
1

属性 [ActionName] を使用する

public class Foo_Bar : Controller
{
     [ActionName("foo-bar")]
     public ViewResult Foo_Bar()        
    {

        return View();
    }
}

コントローラーに相当するものはないため、{controller} を使用してルートで使用することはできません。ただし、少なくとも明示的に定義できます。

于 2011-10-10T03:24:14.683 に答える