2012-07-03 3 views
0

Я пытаюсь использовать json для параметров глобализации моей веб-страницы .. id хотел бы изменить ярлыки моей формы, просто используя небольшое dropdownbox и без обновления всей страницы и более интересной части, я получил более двух форм на мой взгляд.Как изменить ярлыки формы с помощью json и razor snytax в .Net MVC3

до сих пор я сделал это:

Мои 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> 
} 

Нет им на самом деле не использовать этот метод IM освежает весь страницы каждый раз, чтобы изменить язык моих лейблов, но какой-то мой друг сказал мне, что это можно сделать wi thout освежающий, и первое, что пришло мне в голову, было Json .. Я не знаю, возможно ли это, возможно, просто. Любые другие идеи приветствуются.

Я думаю, что заголовок немного запутанный, и, поскольку моя проблема здесь, мы понимаем, поэтому, если кто-нибудь может найти лучший заголовок, попробуйте исправить его.

ответ

0

В вашем Json результате вы должны идентифицировать каждый из меток, которые вы предоставили текст для, скажем, каждая метка имеет объект JSON:

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

Вы предоставить один из этих объектов для каждой метки на Ваша страница в массиве,

{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); 
    } 
}) 

Я не уверен на 100%, что Html будет лучше всего использовать - могут быть элементы sub DOM, созданные MVC, которые необходимо будет учитывать в вашем селекторе.

Если вы хотите придерживаться метода, который вы используете сейчас, вам нужно будет жестко закодировать каждое из назначенных значений по одному за раз.

$.getJSON('@Url.Content("~/Home/People/")', { incoming: lang }, function (data) { 
    $('#Name').Html(data['Name']); 
    $('#Birth').Html(data['Birth']);   
}) 
+0

im не совсем уверен, должен ли я использовать json, это была просто идея. Im ** только **, пытаясь найти способ изменить эти ярлыки, не обновляя страницу. Тем не менее, это может потренироваться, но это будет путать, когда вы будете иметь дело с более чем 40 или более ярлыками. Все еще любила идею, пытающуюся сразу же. Спасибо –

+0

Json - лучший способ узнать, не хотите ли вы обновить страницу. Удачи! –

+0

это не работает, я должен найти способ изменить мой ViewData на Json-данные, тогда у этого может быть шанс. –