0

Web ページのグローバリゼーション オプションに json を使用しようとしています。小さなドロップダウン ボックスを使用するだけで、ページ全体を更新せずにフォームのラベルを変更したいのですが、さらに興味深いのは、ビューに 2 つ以上のフォームがあることです。 .

これまでのところ、私はこれを行ってきました:

私のJson:

public JsonResult Globalx(String incoming)
{
    System.Globalization.CultureInfo Cult = new System.Globalization.CultureInfo(incoming, true);
    System.Threading.Thread.CurrentThread.CurrentCulture = Cult;
    System.Threading.Thread.CurrentThread.CurrentUICulture = Cult;
    Resources.Global.Culture = System.Threading.Thread.CurrentThread.CurrentCulture;
    Global.ResourceManager.GetResourceSet(Cult, false, true);

    ViewData["Name"] = Global.Name;
    ViewData["Surname"] = Global.Surname;
    ViewData["Birth"] = Global.Birth;

    String lnginfo = Resources.Global.Culture.TwoLetterISOLanguageName.ToString();
    ViewData["Languages"] = new SelectList(myList, "Value", "Text", lnginfo);


    return Json(ViewData, JsonRequestBehavior.AllowGet);
}

私の見解:

@model MyCustomers.Models.Customers
@{
    ViewBag.Title = ViewData["NewCustomer"];
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<script type="text/javascript" language="javascript">

$(document).ready(function () {
    function changeLang() {
        var lang = $("#LanguageBox").val();
        $.getJSON('@Url.Content("~/Home/People/")', { incoming: lang }, function (data) {
            // what should i do here to get my label's language changed?
        })
    }
}

</script>

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data", id = "LanguageForm" }))
{
<fieldset>
    <legend>@ViewData["LanguagesTitle"]</legend>
    @Html.DropDownListFor(x => x.SelectedLanguage, (SelectList)ViewData["Languages"], new { onchange = "changeLang()", id = "LanguageBox" })
</fieldset>
}

@using (Html.BeginForm("PeopleForm", "Home", FormMethod.Post, new { enctype = "multipart/form-data", id = "PeopleForm" }))
{
<fieldset>
    <legend>@ViewData["SalesContract"]</legend>
        <div>
            <div class="Name">
                @Html.Label(ViewData["Name"].ToString()) <!--> HERE </!-->
                @Html.EditorFor(x => x.People.Name)
            </div>
            <div class="Surname">
                @Html.Label(ViewData["Surname"].ToString()) <!--> HERE </!-->
                @Html.EditorFor(x => x.People.Surname)
            </div>
            <div class="Birth">
                @Html.Label(ViewData["Birth"].ToString()) <!--> AND HERE </!-->
                @Html.EditorFor(x => x.People.Birth)
            </div>
        </div>
</fieldset>
}

いいえ、私は実際にこの方法を使用していませんが、ラベルの言語を変更するたびにページ全体を更新していますが、私の友人の何人かは、更新せずにそれを行うことができると言い、最初に頭に浮かんだのはJsonでした..わかりませんそれが可能かどうかは、試しているだけです。他のアイデアは大歓迎です。

タイトルは少しわかりにくいと思います。ここでの私の問題は理解されていると思いますので、誰かがより良いタイトルを見つけたら、修正してみてください。

4

1 に答える 1

0

Jsonの結果では、テキストを提供した各ラベルを識別する必要があります。たとえば、各ラベルにJsonオブジェクトがあるとします。

Id: 'label1',
Text: 'Enter your first name'

配列内のページのラベルごとに、これらのオブジェクトの1つを提供します。

{Id: 'label1', Text: 'Enter your first name'},
{Id: 'label2', Text: 'Enter your second name'},
{Id: 'label3', Text: 'Enter your telephone number'},

次に、要求側でこれらのそれぞれに対処します。

$.getJSON('@Url.Content("~/Home/People/")', { incoming: lang }, function (data) {
    for(i = 0; i < data.length; i++){
        $('#'+data[i].Id).Html(data[i].Text);
    }
})

Htmlが最適なものになるかどうかは100%確信していません。MVCによって作成されたサブDOM要素があり、セレクターで考慮する必要がある場合があります。

現在使用しているメソッドに固執したい場合は、割り当てられた各値を一度に1つずつハードコーディングする必要があります。

$.getJSON('@Url.Content("~/Home/People/")', { incoming: lang }, function (data) {
    $('#Name').Html(data['Name']);
    $('#Birth').Html(data['Birth']);        
})
于 2012-07-03T13:35:57.890 に答える