Доступ к Dictionary <string,struct>
Добрый день, вопрос для тех, кто разбирается в .Net
У меня определен статический класс Class1, в котором содержится статический словарь Dictionary и описание структуры: //c# code------------ public static class Class1 { public static Dictionary<string, struct1> Class1_Pict = new Dictionary<string, struct1>(); public struct struct1 { public string pict; //конструктор public struct1 (string pict) {this.pict = pict;} } } //-------------------- Затем мы этот словарь заполняем, не важно на какой странице //c# code------------ Class1.Class1_Pict.Add ("test1", new Class1.struct1("../Theme/pict0.gif"); Class1.Class1_Pict.Add ("test2", new Class1.struct1("../Theme/pict1.gif"); //------------ Заполняется всё хорошо, теперь я пытаюсь с помощью jQuery, поменять src у какой-либо картинки (img1), используя значения из этого словаря. Вопрос как до него достучаться. <head runat="server"> <title></title> <script type="text/javascript" src="http://code.jquery.com/jquery-1.5.js"> </script> </head> <body> <form id="form1" runat="server"> ... <img id="img1" src=""/> <script type="text/javascript"> $("img1").attr("src", :-/ ); </script> </form> </body> --------------- Если вместо :-/ вставить значение "../Theme/pict1.gif", то картинка отображается. Мне же нужно получить значение из моего Dictionary, в c# это делается так: string s = Class1.Class1_Pict["test1"].pict; Как это значение вытащить через jQuery? |
Ваш C#-вый код выполняется на сервере, а JS - на клиенте. Соответственно, к моменту выполнения JS скрипта .Net уже отработал и все эти поля Class1 были любезно собраны сборщиком мусора. Так что - никак.
Нужно передавать эти данные клиенту и работать с ними на его стороне. |
Там есть мой косяк, руками писал, запнулся, конечно $("#img1"), сорри.
То есть получается, что из клиентского скрипта не достучаться до моего Dictionary? Мне нужно менять десяток картинок по нажатию на кнопку, единственное, что пришло в голову, это определить Dictionary, в котором и хранить значения "src". По нажатию на кнопку определяется "key" и по этому ключу из Dictionary получаем "src". Подменить же картинки, без перезагрузки страницы, легко позволяет jQuery. Подскажите другой возможный вариант реализации? |
Я не совсем понял Ваш вариант, но мой таков:
Отдавать в коде страницы еще и массив этих src, с которыми уже и работать из jQuery. <script type="text/javascript"> // здесь какая-нибудь вставка кода, исполняющегося на сервере и генерирующая что-то вроде // var arr = ["../Theme/pict0.gif", "../Theme/pict1.gif", "../Theme/pict2.gif"] $("#img1").attr("src", arr[0]); </script> |
Дадада =) это именно оно.
Только можно поподробнее что за код, исполняющийся на сервере? У меня определен словарь, и нужно получить значение по ключу. Вопрос не сложный. Как это делается? =) |
Оу, ребят, мне на готдотнете подсказали, кому интересно
если вопрос только в доступе к справочнику и подмене src, то могу предложить такой вариант - разместить на странице HiddenField 1. <asp:HiddenField ID="HFImgUrlString" runat="server /"> - в PageLoad view source ? 01. StringBuilder temp = new StringBuilder(); 02. Class1.Class1_Pict.Add ("test1", new Class1.struct1("../Theme/pict0.gif"); 03. Class1.Class1_Pict.Add ("test2", new Class1.struct1("../Theme/pict1.gif"); 04. ... 05. foreach(string key in Class1.Class1_Pict.Keys) 06. { 07. temp.Append(key + "#" + Class1.Class1_Pict[key].pict + ";"); 08. } 09. HFImgUrlString.Value = temp.ToString(); - в js на странице остается распарсить строку 01. var img_dict = new Array(); 02. $(function(){ 03. var temp_mas = $('#' + '<%= HFImgUrlString.ClientID %>').val().split(';'); 04. $(temp_mas).each(function(index, element){ 05. if(element != ''){ 06. var tmp = element.split('#'); 07. img_dict[tmp[0]] = tmp[1]; 08. } 09. }); 10. }); теперь можно так 1. $("#img1").attr("src", img_dict['test1'] ); #такие дела ------ номера строк только не в счет ;) |
Часовой пояс GMT +3, время: 00:24. |