2017-12-22 10 views
0

私はURLにダッシュを入れることができないMVC5で作業しています。私が望むのは、言葉の間にダッシュを入れることです。私の作業コードをよく見てください。私は、ネットMVCのURLにダッシュを入れたいと思います。

  routes.Add(
        new Route("{MyApple}/{page}", 
         new RouteValueDictionary(
          new { controller = "MyApple", action = "Index", page = "" }), 
          new HyphenatedRouteHandler()) 
       ); 

そして、私のコントローラは、次のとおりです:

マイルートConfigがある

public ActionResult Index(string page) 
{ 
    if (System.IO.File.Exists(Server.MapPath("/Views/MyApple/" + page + ".cshtml"))) 
    { 
     string userId = ""; 
     if (Session["AppId"] != null) 
     userId = Session["AppId"].ToString(); 

     Session["ReturnUrl"] = Url.Action("EmptyTemplate"); 
     IBaseViewModel model = new BaseViewModel(); 
     return View(page, model); 
    }    
} 

このパラメータは、ページに行く私のコントローラです。 例:devpage = aspdotnet次にビューをレンダリングします。aspdotnet.html

この編集されたコンテンツで助けてください。 小文字のURLにダッシュしたいと思います。 例:私

localhost/case-study/perfect-solution

その後、私はperfectsolution.htmlページがあると(私の英語を気にしないでください).Helpは理解されるであろう。ありがとう

注:インデックスページでは、私は "完璧なソリューション"を使用してビューに渡しますが、私はURL、完璧なソリューションにしたいです。

+0

こんにちは、あなたは、単一のコントローラで特定のアクションをターゲットにしていますか?それとも、これはシステム全体の調整ですか?コントローラの関連部分も表示できますか? – Stefan

+0

これは単一コントローラ内にあります。 Ok、Lemme私の質問を編集 –

+0

コントローラを投稿できますか?私は行動の署名を見たい。 – Stefan

答えて

2

このタイプのURL/case-studies/san-Diego-veg-festival、 casestudies is controllerとsan-diego-veg-festivalがパラメータです。あなたのコメントを1として

、私はあなたがCaseStudiesコントローラのIndexメソッドにパラメータ値を渡すようにしようとしているの推測をしました。選択するルーティングの

二種類、必要に応じて、あなたは誰を選択することができます。

1.条約に基づくあなたのRouteConfig.csファイルで

ルーティングの変更を行います。

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "CaseStudiesRoute", 
      url: "case-studies/{devPage}", 
      defaults: new { controller = "CaseStudies", action = "Index", devPage = UrlParameter.Optional } 
     ); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

コントローラ:

public class CaseStudiesController : Controller 
{ 

    public ActionResult Index(string devPage) 
    { 
     return View(); 
    } 

} 

今すぐあなたのブラウザを使用してGETのURLへのリクエストを/case-studies/san-Diego-veg-festivalに伝えてください、それはConvention-based Routingで動作するはずです。

2。

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapMvcAttributeRoutes(); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

はコントローラー:今すぐにGET要求を与え、あなたのブラウザを使用して

public class CaseStudiesController : Controller 
{ 

    [Route("case-studies/{devPage?}")] 
    public ActionResult Index(string devPage) 
    { 
     return View(); 
    } 

} 

あなたRouteConfig.cs属性のルーティングを有効にする、routes.MapMvcAttributeRoutes();を追加することによって、今RouteConfig.csがどのように見えるで

ルーティング属性URL、/case-studies/san-Diego-veg-festival、属性ルーティングで動作するはずです。

参照

1.

2.

+0

の値として取られます。申し訳ありませんが、どちらも私のケースでは動作しません。私はあなた、私のコントローラを見せてください? –

+0

はい、あなたの投稿を編集し、あなたのコントローラと 'RouteConfig.cs'の詳細を追加してください。 – stom

+0

ok、今私はそれを編集しています –

1

ルーティング属性機能を使用してみてください

[ルート( "研究/パーフェクト・ソリューション")]

は、例えば:

[Route("study/perfect-solution")] 
public ActionResult PerfectSolution() 
{ 
// code here 
} 

あなたはパラメータを渡したい場合は、必要が指定する

例:

[Route("study/perfect-solution/{parameter}")] 
public ActionResult PerfectSolution(string parameter) 
{ 
// code here 
} 
+0

ありがとうございました。しかし、そうです、私はそれを使用しましたが。このタイプのURLが必要です。 /case-studies/san-Diego-veg-festival.どうすれば入手できますか?注:casestudiesはコントローラーでsan-diego-veg-festivalはパラメーター –

+0

はアクションのsan-diego-veg-festivalの名前ですか、これはアクションに渡す引数ですか? –

+0

URLに送信するパラメータは –

関連する問題