0

私はwebformsaspxプロジェクトで多言語サイトを構築しており、これを行うための最良の解決策を考えています。

MasterPageにいくつかの画像があり、クリックすると、WebメソッドにリダイレクトされるJqueryメソッドを呼び出しています。

次に、Cultureを初期化するベースページがあり、MasterPageを除くすべてのページがCultureから継承しています。

これまでのところ、私は次のものを持っています:-

HTML:-

<div class="LocalizationFlags">
<img src="Images/gb.png" onclick="langSelection('gb')" /> &nbsp; &nbsp; 
<img src="Images/fr.png" onclick="langSelection('fr')"/> &nbsp; &nbsp; 
<img src="Images/es.png" onclick="langSelection('es')"/> &nbsp; &nbsp; 
<img src="Images/de.png" onclick="langSelection('de')"/> &nbsp; &nbsp; 
<img src="Images/it.png" onclick="langSelection('it')"/>
</div>

JQuery:-

    function langSelection(lang) {
    setSession(lang);
};

function setSession(Lang) {
    var args = {
        lang: Lang
    };
    $.ajax({
        type: "POST",
        url: "Site.Master.aspx/SetUserCulture",
        data: JSON.stringify(args),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function () {
            alert('Success.');
        },
        error: function () {
            alert("Fail");
        }
    });
};

Site.Master.cs

    [WebMethod(EnableSession = true)]
    private void SetUserCulture(string lang)
    {
        HttpContext.Current.Session["CurrentUI"] = lang;
    }

BasePage.cs

    protected override void InitializeCulture()
    {
        if (Session["CurrentUI"] != null)
        {
            String selectedLanguage = (string)Session["CurrentUI"];
            UICulture = selectedLanguage;
            Culture = selectedLanguage;

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

        base.InitializeCulture();
    }

今、私が現在持っているものにはいくつかの問題があります。Jqueryが機能せず、「Fail」がスローされます。また、Site.Master.csを使用してWebメソッドを配置できないこともわかっています。

このメソッドのWCFサービスを作成し、それをJqueryコードから呼び出す場合だけですか?

私はここで正しい方向に進んでいますか?

あなたの助けと時間をありがとう

4

1 に答える 1

0

WebMethodマスターのコードビハインドに含めることはできないと言ったように、ajaxリクエストは宛先に到達しないために失敗する可能性があります。また、JSONを使用してパラメーターをシリアル化する必要はありません。プレーン・オブジェクトも同様に機能するはずです。また、dataType: jsonここでは必要ありません。このリクエストのデータは返されません。

ここではWebサービスは必要ありません。単純なHTTPハンドラーで十分です。IRequiresSessionStateハンドラー内のセッションにアクセスするためのマーカーインターフェイスを実装することを忘れないでください。

一般に、Cookieは、同じユーザーのさまざまな訪問にわたってこの情報を保持したい場合があるため、ユーザーの文化を保存するのに適した場所である可能性があります。別のオプションは、DBのユーザープロファイルでもあります-登録ユーザーを扱っている場合に備えて。ただし、セッションを使用する現在の実装は機能するはずです。

于 2013-03-27T14:08:42.577 に答える