2017-06-01 3 views
0

私は多言語のWebサイトで作業しています。まず言語を設定してから、リソースファイルを使用してその言語でページを表示する必要があります。Asp.net MVCのオーバーロードインデックスアクション

私は2つのindexアクションこのように使用:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading; 
using System.Web; 
using System.Web.Mvc; 
using System.Globalization; 
using global_vrf.GeoIpService; 

namespace global_vrf.Controllers 
    { 
    public class HomeController : Controller 
    { 
     public ActionResult Index(string language) 
    { 


     Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language); 
     Thread.CurrentThread.CurrentUICulture = new CultureInfo(language); 

     return View(); 
    } 

    public ActionResult Index() 
    { 
     string language="en-us"; 

     return View(language); 


    } 


    } 
} 

を私はページを実行すると、私はこのエラーがあります:

The current request for action 'Index' on controller type 'HomeController' is ambiguous between the following action methods: System.Web.Mvc.ActionResult Index(System.String) on type global_vrf.Controllers.HomeController System.Web.Mvc.ActionResult Index() on type global_vrf.Controllers.HomeController

+0

これは、同じ名前のアクションメソッドがあるために発生します。これを避けるには、各メソッドの前に[HTTPGet]と[HTTPPost]を使用する必要があります。 –

+1

2番目の方法を削除します。最初の方法では 'language'の値が' null'ならば 'en-us"に設定します。 –

+0

@StephenMueckethankあまりにも、teo van kotは同じことを示唆し、それはうまく動作します –

答えて

1

だけ作るのひとつの方法:

namespace global_vrf.Controllers 
{ 
    public class HomeController : Controller 
    { 
     public ActionResult Index(string language) 
     { 
      if(String.IsNullOrWhiteSpace(language)) 
      { 
      string language="en-us"; 
      } 
      Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language); 
      Thread.CurrentThread.CurrentUICulture = new CultureInfo(language); 

      return View(); 
     } 
    } 
} 

の2つの方法はできませんはnullでもかまいません。

+0

おかげで良いアイデア、私はそれに取り組んで、私はあなたにこれが動作する場合はお知らせします –

0
[HttpPost] 
public ActionResult Index(string language) 
{ 
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language); 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(language); 

    return View(); 
} 

[HttpGet] 
    public ActionResult Index() 
    { 
     string language="en-us"; 

     return View(language); 


    } 
+0

あなたの世話に感謝しますエラーが 'en-us 'のビューまたはそのマスターが見つかりませんでした'私はこの行でもいくつかの変更を加える必要があると思います 'return View(language); –

+0

あなたは@modelを使用する必要があります文字列を最初の行に追加します。私はあなたがすでにビューを持っていると思います。 –

+0

はい私は単純なビューを持っています、何も重要ではない、違いはありません、私はこのようなものが必要であることを意味しました 'return RedirectToAction(" Index "、" Home "、new {language = language}) ; ' –