Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Доступ к Dictionary <string,struct> (https://javascript.ru/forum/dom-window/18245-dostup-k-dictionary-string-struct.html)

Jeer 23.06.2011 04:26

Доступ к 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?

B@rmaley.e><e 23.06.2011 14:04

Ваш C#-вый код выполняется на сервере, а JS - на клиенте. Соответственно, к моменту выполнения JS скрипта .Net уже отработал и все эти поля Class1 были любезно собраны сборщиком мусора. Так что - никак.
Нужно передавать эти данные клиенту и работать с ними на его стороне.

Jeer 23.06.2011 14:20

Там есть мой косяк, руками писал, запнулся, конечно $("#img1"), сорри.

То есть получается, что из клиентского скрипта не достучаться до моего Dictionary?
Мне нужно менять десяток картинок по нажатию на кнопку, единственное, что пришло в голову, это определить Dictionary, в котором и хранить значения "src".
По нажатию на кнопку определяется "key" и по этому ключу из Dictionary получаем "src". Подменить же картинки, без перезагрузки страницы, легко позволяет jQuery.
Подскажите другой возможный вариант реализации?

B@rmaley.e><e 23.06.2011 14:33

Я не совсем понял Ваш вариант, но мой таков:
Отдавать в коде страницы еще и массив этих src, с которыми уже и работать из jQuery.
<script type="text/javascript">
// здесь какая-нибудь вставка кода, исполняющегося на сервере и генерирующая что-то вроде
// var arr = ["../Theme/pict0.gif", "../Theme/pict1.gif", "../Theme/pict2.gif"]
 $("#img1").attr("src", arr[0]);
 </script>

Jeer 23.06.2011 14:41

Дадада =) это именно оно.
Только можно поподробнее что за код, исполняющийся на сервере? У меня определен словарь, и нужно получить значение по ключу.
Вопрос не сложный. Как это делается? =)

Jeer 23.06.2011 14:55

Оу, ребят, мне на готдотнете подсказали, кому интересно

если вопрос только в доступе к справочнику и подмене src, то могу предложить такой вариант
- разместить на странице HiddenField
1.
<asp:HiddenField ID="HFImgUrlString" runat="server /">

- в PageLoad
view source

print
?
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:30.