Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование (VB,C#,ASP,.NET): новости, советы, примеры



Выпуск # 176


http://www.kbyte.ru/

 

Новый выпуск!

Здравствуйте дамы и господа!
Очередной выпуск рассылки Kbyte.Ru!

 

Содержание выпуска

Система ЭКСПЕРТ

    Вопрос #000424: пропадают типы проектов в vb6

    Вопрос #000419: Как динамически добавить на форму ComboBox-ы

    Вопрос #000408: Работа с текстовой базой данных.

    Вопрос #000406: VB-6_и__текстовоый_файл

    Вопрос #000401: Запись данных в последовательный и параллельный...

Последнее на форумах

    AJAX

    Callback

    Membership

    Context Menu Shell Extension / VB.NET

    Помогите с кастомизацией пейджера в GridView

Последние статьи

    Взаимодействие с другими сайтами через HTTP (HttpWebRequest и HttpWebResponse)

    Работа с SQL – Запросы

    Использование XML.Serialization

    Выбор языка программирования для научных работ (2-я редакция)

    Работаем с MIME

Интересные коды и решения

Юмор на Kbyte.Ru

 

Система ЭКСПЕРТ

 

Система «Эксперт» - уникальная система, которая поможет решить, если не все, то многие Ваши проблемы с программированием и разработкой! Если у Вас есть какой-либо вопрос по программированию или разработке, то Вы всегда можете задать его нашим Экспертам! При этом каких-либо особых действий от Вас не потребуется! Просто отправьте Ваш вопрос на адрес mailto:expert@kbyte.ru, в теме письма укажите тему вопроса, в тексте – сам вопрос, и все! Эксперты дадут Вам ответ в течение 12-24 часов, на тот адрес, с которого Вы отправите вопрос. Все проще простого! Никакой регистрации и заполнение бесконечных форм, никаких наездов, оскорблений и насмешек со стороны гуру, просто спросите и получите ответ ;-)


Вопрос #000424: пропадают типы проектов в vb6

Автор вопроса: Сницарёв Ю.В. // 22.08.2007 / 09:07

Здравствуйте!
Пользуюсь vb6 sp4 (версия проф-л или энт-з), операционка WinXP Pro Sp1
Rus. При старте студии (если указано в настройках) в диалоговом окне
предлагается выбрать тип проекта (стандартный, активХ...). Уже пару раз
сталкиваюсь с тем, что из набора проектов по непонятной причине исчезает
большинство типов проектов, остаются только самые простые. В студии ничего
не переустанавливалось и не менялось.
Вопрос: как вернуть пропавшие профи-типы проектов?
С уважением Юрий
--
Сницарёв Ю.В.

Отвечает: Алексей Немиро // 22.08.2007 / 09:23

Здравствуйте, Сницарёв Ю.В!

Шаблоны для проектов лежат в папке
C:\Program Files\Microsoft Visual Studio\VB98\Template

Если эту папку удалить, или по каким-то причинам VB не будет иметь к
ней доступ, то список проектов будет сокращен до:
Standart EXE
ActiveX EXE
ActiveX DLL
AtiveX Control

Если с папкой у Вас все нормально, то возможно, что-то или кто-то
блокирует к ней доступ, возможно какой-нибудь антивирус, или вирус :)

--
С наилучшими пожеланиями,
Немиро Алексей

 

Вопрос #000419: Как динамически добавить на форму ComboBox-ы

Автор вопроса: "Abu Ali" // 18.08.2007 / 11:28

Здравствуйте, Эксперты!. Как в C# программно добавит в форму несколько ComboBox в зависимости от условия. Т.е. допустим если переменная х=4 то 4 ComboBoxа, если х=5 то 4 ComboBoxа С уважением, Абу Али

Отвечает: Алексей Немиро // 18.08.2007 / 11:34

Также, как и любой другой элемент:

001:
002:
003:
004:
005:
006:
007:
008:
int x = 4;
for (int i = 0; i <= x; i++)
{
 ComboBox myCombo = new ComboBox();
 myCombo.Name = "myCombo" + i.ToString();
 myCombo.Top = i * myCombo.Height + 2;
 this.Controls.Add(myCombo);
}

 

Вопрос #000408: Работа с текстовой базой данных.

Автор вопроса: Григорьев // 09.08.2007 / 10:58

Здравствуйте, Эксперты!

VB-6 не воспринимает строку
Dim [To] As String - выдаёт сообщение:

Ошибка компиляции:
Ошибка синтаксиса.

Видимо, скобки не помогли :)
Может, посоветуете, как это обойти?

С уважением,
Григорьев Николай.

Отвечает: Алексей Немиро // 09.08.2007 / 11:14

Может, посоветуете, как это обойти?

Можно, поменяйте имя переменной, вместо To, на что-нибудь другое:
Dim To1 As String

 

Вопрос #000406: VB-6_и__текстовоый_файл

Автор вопроса: Григорьев // 06.08.2007 / 11:35

Здравствуйте, expert.

Подскажите, пожалуйста, как в VB-6 организовать извлечение данных из текстового файла?
Например, задав ID =F9 и число 15,7 (лежит в диапазоне 14...18), нужно получить +0,059 и +0.016 для дальнейших расчётов.
Фрагмент текстового файла -во вложении.
Таких "Таблиц" много готовых, поэтому преобразовывать их в какой-либо другой формат нецелесообразно.

С уважением, Григорьев Николай.

Текстовой файл:
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
026:
027:
028:
029:
030:
031:
032:
033:
034:
035:
036:
037:
038:
039:
040:
041:
042:
043:
044:
045:
046:
047:
048:
049:
050:
051:
052:
053:
054:
055:
056:
057:
058:
059:
060:
061:
062:
063:
064:
065:
066:
067:
068:
069:
070:
071:
072:
073:
074:
075:
076:
077:
078:
079:
080:
081:
082:
083:
084:
085:
086:
087:
088:
089:
090:
091:
092:
093:
094:
095:
096:
097:
098:
099:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
* Предельные отклонения отверстий по СТ СЭВ 144-88
* Для отверстий диаметром свыше "От" до диаметра "До"
** Не трогать колонки здесь и в других таблицах стандарта!
ID  От  До  ВО   НО
A9  3  6  +0.30  +0.27
A11  3  6  +0.345 +0.270
A13  3  6  +0.45  +0.27
B9  3  6  +0.17  +0.14
B11  3  6  +0.215 +0.140
B12  3  6  +0.26  +0.14
B13  3  6  +0.32  +0.14
C8  3  6  +0.088 +0.070
C9  3  6  +0.10  +0.07
C11  3  6  +0.145 +0.070
C12  3  6  +0.19  +0.07
C13  3  6  +0.25  +0.07
D6  3  6  +0.038 +0.030
D7  3  6  +0.042 +0.030
D8  3  6  +0.048 +0.030
D9  3  6  +0.06  +0.03
D10  3  6  +0.078 +0.030
D11  3  6  +0.105 +0.030
D12  3  6  +0.15  +0.03
E5  3  6  +0.025 +0.020
E6  3  6  +0.028 +0.020
E7  3  6  +0.032 +0.020
E8  3  6  +0.038 +0.020
E9  3  6  +0.05  +0.02
E10  3  6  +0.068 +0.020
F5  3  6  +0.015 +0.010
F6  3  6  +0.018 +0.010
F7  3  6  +0.022 +0.010
F8  3  6  +0.028 +0.010
F9  3  6  +0.04  +0.01
F10  3  6  +0.058 +0.010
G5  3  6  +0.009 +0.004
G6  3  6  +0.012 +0.004
G7  3  6  +0.016 +0.004
H4  3  6  +0.004
H5  3  6  +0.005
H6  3  6  +0.008
H7  3  6  +0.012
H8  3  6  +0.018
H9  3  6  +0.03
H10  3  6  +0.048
H11  3  6  +0.075
H12  3  6  +0.12
H13  3  6  +0.18
H14  3  6  +0.3
H15  3  6  +0.4
H16  3  6  +0.75
J6  3  6  +0.005 -0.003
J7  3  6  +0.006 -0.006
J8  3  6  +0.010 -0.008
Js4  3  6  +0.002 -0.002
Js5  3  6  +0.0025 -0.0025
Js6  3  6  +0.004 -0.004
Js7  3  6  +0.006 -0.006
Js8  3  6  +0.009 -0.009
Js9  3  6  +0.015 -0.015
Js10 3  6  +0.024 -0.024
Js11 3  6  +0.037 -0.037
Js12 3  6  +0.06  -0.06
Js13 3  6  +0.09  -0.09
Js14 3  6  +0.15  -0.15
K5  3  6      -0.005
K6  3  6  +0.002 -0.006
K7  3  6  +0.003 -0.009
K8  3  6  +0.005 -0.013
M5  3  6  -0.003 -0.008
M6  3  6  -0.001 -0.009
M7  3  6      -0.012
M8  3  6  +0.002 -0.016
N5  3  6  -0.007 -0.012
N6  3  6  -0.005 -0.013
N7  3  6  -0.004 -0.016
N8  3  6  -0.002 -0.020
N9  3  6      -0.03
N10  3  6      -0.048
P5  3  6  -0.011 -0.016
P6  3  6  -0.009 -0.017
P7  3  6  -0.008 -0.020
P8  3  6  -0.012 -0.030
P9  3  6  -0.012 -0.042
R6  3  6  -0.012 -0.020
R7  3  6  -0.011 -0.023
R8  3  6  -0.015 -0.033
S6  3  6  -0.016 -0.024
S7  3  6  -0.015 -0.027
T6  3  6
T7  3  6
U7  3  6  -0.019 -0.031
U8  3  6  -0.023 -0.041
Z8  3  6  -0.035 -0.053
A9  6  10  +0.316 +0.280
A11  6  10  +0.37  +0.28
A13  6  10  +0.50  +0.28
B9  6  10  +0.186 +0.150
B11  6  10  +0.24  +0.15
B12  6  10  +0.30  +0.15
B13  6  10  +0.37  +0.15
C8  6  10  +0.102 +0.080
C9  6  10  +0.116 +0.080
C11  6  10  +0.17  +0.08
C12  6  10  +0.23  +0.08
C13  6  10  +0.30  +0.08
D6  6  10  +0.049 +0.040
D7  6  10  +0.055 +0.040
D8  6  10  +0.062 +0.040
D9  6  10  +0.076 +0.040
D10  6  10  +0.098 +0.040
D11  6  10  +0.13  +0.04
D12  6  10  +0.19  +0.04
E5  6  10  +0.031 +0.025
E6  6  10  +0.034 +0.025
E7  6  10  +0.040 +0.025
E8  6  10  +0.047 +0.025
E9  6  10  +0.061 +0.025
E10  6  10  +0.083 +0.025
F5  6  10  +0.019 +0.013
F6  6  10  +0.022 +0.013
F7  6  10  +0.028 +0.013
F8  6  10  +0.035 +0.013
F9  6  10  +0.049 +0.013
F10  6  10  +0.071 +0.013
G5  6  10  +0.011 +0.005
G6  6  10  +0.014 +0.005
G7  6  10  +0.020 +0.005
H4  6  10  +0.004
H5  6  10  +0.006
H6  6  10  +0.009
H7  6  10  +0.015
H8  6  10  +0.022
H9  6  10  +0.036
H10  6  10  +0.058
H11  6  10  +0.09
H12  6  10  +0.15
H13  6  10  +0.22
H14  6  10  +0.36
H15  6  10  +0.58
H16  6  10  +0.9
J6  6  10  +0.005 -0.004
J7  6  10  +0.008 -0.007
J8  6  10  +0.012 -0.010
Js4  6  10  +0.002 -0.002
Js5  6  10  +0.003 -0.003
Js6  6  10  +0.0045 -0.0045
Js7  6  10  +0.007 -0.007
Js8  6  10  +0.011 -0.011
Js9  6  10  +0.018 -0.018
Js10 6  10  +0.029 -0.029
Js11 6  10  +0.045 -0.045
Js12 6  10  +0.075 -0.075
Js13 6  10  +0.11  -0.11
Js14 6  10  +0.18  -0.18
K5  6  10  +0.001 -0.005
K6  6  10  +0.002 -0.007
K7  6  10  +0.005 -0.010
K8  6  10  +0.006 -0.016
M5  6  10  -0.004 -0.010
M6  6  10  -0.003 -0.012
M7  6  10      -0.015
M8  6  10  +0.001 -0.021
N5  6  10  -0.008 -0.014
N6  6  10  -0.007 -0.016
N7  6  10  -0.004 -0.019
N8  6  10  -0.003 -0.025
N9  6  10      -0.036
N10  6  10      -0.058
P5  6  10  -0.013 -0.019
P6  6  10  -0.012 -0.021
P7  6  10  -0.009 -0.024
P8  6  10  -0.015 -0.037
P9  6  10  -0.015 -0.051
R6  6  10  -0.016 -0.025
R7  6  10  -0.013 -0.028
R8  6  10  -0.019 -0.041
S6  6  10  -0.020 -0.029
S7  6  10  -0.017 -0.032
T6  6  10
T7  6  10
U7  6  10  -0.022 -0.037
U8  6  10  -0.028 -0.050
Z8  6  10  -0.042 -0.064
A9  10  14  +0.333 +0.29
A11  10  14  +0.40  +0.29
A13  10  14  +0.56  +0.29
B9  10  14  +0.193 +0.150
B11  10  14  +0.26  +0.15
B12  10  14  +0.33  +0.15
B13  10  14  +0.42  +0.15
C8  10  14  +0.122 +0.095
C9  10  14  +0.138 +0.095
C11  10  14  +0.205 +0.095
C12  10  14  +0.275 +0.095
C13  10  14  +0.365 +0.095
D6  10  14  +0.061 +0.050
D7  10  14  +0.068 +0.050
D8  10  14  +0.077 +0.050
D9  10  14  +0.093 +0.050
D10  10  14  +0.12  +0.05
D11  10  14  +0.16  +0.05
D12  10  14  +0.23  +0.05
E5  10  14  +0.040 +0.032
E6  10  14  +0.043 +0.032
E7  10  14  +0.050 +0.032
E8  10  14  +0.059 +0.032
E9  10  14  +0.075 +0.032
E10  10  14  +0.102 +0.032
F5  10  14  +0.024 +0.016
F6  10  14  +0.027 +0.016
F7  10  14  +0.034 +0.016
F8  10  14  +0.043 +0.016
F9  10  14  +0.059 +0.016
F10  10  14  +0.086 +0.016
G5  10  14  +0.014 +0.006
G6  10  14  +0.017 +0.006
G7  10  14  +0.024 +0.006
H4  10  14  +0.005
H5  10  14  +0.008
H6  10  14  +0.011
H7  10  14  +0.018
H8  10  14  +0.027
H9  10  14  +0.043
H10  10  14  +0.07
H11  10  14  +0.11
H12  10  14  +0.18
H13  10  14  +0.27
H14  10  14  +0.43
H15  10  14  +0.7
H16  10  14  +1.1
J6  10  14  +0.006 -0.005
J7  10  14  +0.010 -0.008
J8  10  14  +0.015 -0.012
Js4  10  14  +0.0025 -0.0025
Js5  10  14  +0.004 -0.004
Js6  10  14  +0.0055 -0.0055
Js7  10  14  +0.009 -0.009
Js8  10  14  +0.013 -0.013
Js9  10  14  +0.021 -0.021
Js10 10  14  +0.035 -0.035
Js11 10  14  +0.055 -0.055
Js12 10  14  +0.09  -0.09
Js13 10  14  +0.135 -0.135
Js14 10  14  +0.215 -0.215
K5  10  14  +0.002 -0.006
K6  10  14  +0.002 -0.009
K7  10  14  +0.006 -0.012
K8  10  14  +0.008 -0.019
M5  10  14  -0.004 -0.012
M6  10  14  -0.004 -0.015
M7  10  14      -0.018
M8  10  14  +0.002 -0.025
N5  10  14  -0.009 -0.017
N6  10  14  -0.009 -0.020
N7  10  14  -0.005 -0.023
N8  10  14  -0.003 -0.030
N9  10  14      -0.043
N10  10  14      -0.07
P5  10  14  -0.015 -0.023
P6  10  14  -0.015 -0.026
P7  10  14  -0.011 -0.029
P8  10  14  -0.018 -0.045
P9  10  14  -0.018 -0.061
R6  10  14  -0.020 -0.031
R7  10  14  -0.016 -0.034
R8  10  14  -0.023 -0.050
S6  10  14  -0.025 -0.036
S7  10  14  -0.021 -0.039
T6  10  14
T7  10  14
U7  10  14  -0.026 -0.044
U8  10  14  -0.033 -0.060
Z8  10  14  -0.050 -0.077
A9  14  18  +0.333 +0.290
A11  14  18  +0.40  +0.29
A13  14  18  +0.56  +0.29
B9  14  18  +0.193 +0.150
B11  14  18  +0.26  +0.15
B12  14  18  +0.33  +0.15
B13  14  18  +0.42  +0.15
C8  14  18  +0.122 +0.095
C9  14  18  +0.138 +0.095
C11  14  18  +0.205 +0.095
C12  14  18  +0.275 +0.095
C13  14  18  +0.365 +0.095
D6  14  18  +0.061 +0.050
D7  14  18  +0.068 +0.050
D8  14  18  +0.077 +0.050
D9  14  18  +0.093 +0.050
D10  14  18  +0.12  +0.05
D11  14  18  +0.16  +0.05
D12  14  18  +0.23  +0.05
E5  14  18  +0.040 +0.032
E6  14  18  +0.043 +0.032
E7  14  18  +0.050 +0.032
E8  14  18  +0.059 +0.032
E9  14  18  +0.075 +0.032 
E10  14  18  +0.102 +0.032
F5  14  18  +0.024 +0.016
F6  14  18  +0.027 +0.016
F7  14  18  +0.034 +0.016
F8  14  18  +0.043 +0.016
F9  14  18  +0.059 +0.016  Пример из этой строки: ID =F9 и число 15,7 (лежит в диапазоне 14...18)
F10  14  18  +0.086 +0.016              надо получить: ВО= +0.059   НО= +0.016
G5  14  18  +0.014 +0.006
G6  14  18  +0.017 +0.006
G7  14  18  +0.024 +0.006
H4  14  18  +0.005
H5  14  18  +0.008
H6  14  18  +0.011
H7  14  18  +0.018
H8  14  18  +0.027
H9  14  18  +0.043
H10  14  18  +0.07
H11  14  18  +0.11
H12  14  18  +0.18
H13  14  18  +0.27
H14  14  18  +0.43
H15  14  18  +0.7
H16  14  18  +1.1
J6  14  18  +0.006 -0.005
J7  14  18  +0.010 -0.008
J8  14  18  +0.015 -0.012
Js4  14  18  +0.0025 -0.0025
Js5  14  18  +0.004 -0.004
Js6  14  18  +0.0055 -0.0055
Js7  14  18  +0.009 -0.009
Js8  14  18  +0.013 -0.013
Js9  14  18  +0.021 -0.021
Js10 14  18  +0.035 -0.035
Js11 14  18  +0.055 -0.055
Js12 14  18  +0.09  -0.09
Js13 14  18  +0.135 -0.135
Js14 14  18  +0.215 -0.215
K5  14  18  +0.002 -0.006
K6  14  18  +0.002 -0.009
K7  14  18  +0.006 -0.012
K8  14  18  +0.008 -0.019
M5  14  18  -0.004 -0.012
M6  14  18  -0.004 -0.015
M7  14  18      -0.018
M8  14  18  +0.002 -0.025
N5  14  18  -0.009 -0.017
N6  14  18  -0.009 -0.020
N7  14  18  -0.005 -0.023
N8  14  18  -0.003 -0.030
N9  14  18      -0.043
N10  14  18      -0.07
P5  14  18  -0.015 -0.023
P6  14  18  -0.015 -0.026
P7  14  18  -0.011 -0.029
P8  14  18  -0.018 -0.045
P9  14  18  -0.018 -0.061
R6  14  18  -0.020 -0.031
R7  14  18  -0.016 -0.034
R8  14  18  -0.023 -0.050
S6  14  18  -0.025 -0.036
S7  14  18  -0.021 -0.039
T6  14  18
T7  14  18
U7  14  18  -0.026 -0.044
U8  14  18  -0.033 -0.060
Z8  14  18  -0.060 -0.087

Отвечает: Алексей Немиро // 06.08.2007 / 11:53

Здравствуйте, Николай!

Ваш текстовой файл имеет определенную структуру, Вы можете
прочитать файл построчно, занося в переменные параметры, которые
находятся в файле, например:

001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
026:
027:
028:
029:
030:
031:
032:
033:
034:
035:
Dim sReadLine As String
'открываем файл для чтения
Open "C:\Данные.txt" For Input As #1
'считываем файл и выводим построчно _
пока EOF равен False
Do Until EOF(1)
 'читаем строку
 Line Input #1, sReadLine
 'если это не комментарий
 If Not Left(Trim(sReadLine), 1) = "*" Then
  'это не комментарий, значит это данные
  Dim ID As String
  Dim From As String
  Dim [To] As String 'в скобках, поскольку To является ключевым словом Visual Basic
  Dim BO As String
  Dim HO As String
  ID = Trim(Mid(sReadLine, 1, 6)) 'первые 6 символов в строке
  'функция Trim удаляет все пробелы по бокам
  If UCase(ID) = "F9" Then 'вместо "F9" надо поставить переменную, которая будет содержать искомое значение
   'нашли идишник, который нам нужен, получаем остальные данные
   From = Trim(Mid(sReadLine, 7, 5))
   'далее, поскольку это число, можем его преобразовать в число
   Dim dFrom As Double
   If IsNumeric(From) Then dFrom = CDbl(From)
   'остальные параметры
   [To] = Trim(Mid(sReadLine, 12, 5))
   '.. делаем тоже самое что и с From
   '..
   '...
   'и т.д. и т.п
   Exit Do 'выходим из цикла, т.к. все что нужно мы уже нашли
  End If
 End If
Loop
Close #1 'закрываем файл


--
С наилучшими пожеланиями,
Немиро Алексей

 

Вопрос #000401: Запись данных в последовательный и параллельный...

Автор вопроса: // 03.08.2007 / 13:35

Как записать двоичные данные в COM и LPT порт из C# ? Приведите,пожалуйста,примеры.
Спасибо!
__________

Отвечает: EROS // 04.08.2007 / 09:37

Здравствуйте.
В NET для работы с портами предусмотрен класс
System.IO.Ports.SerialPort.
Для записи данных в порт используйте один из перегруженных методов
Write или WriteLine
--
С уважением,
EROS

 


Чтобы задать Ваш вопрос, отправьте его на адрес expert@kbyte.ru

Раздел Эксперт на сайте Kbyte.Ru

Наверх

 

 

Последнее на форумах

AJAX | Автор: Bille Gates
Добавлено: 22.08.2007 / 15:01 | ответов: 3 | просмотров: 43

И снова общеобразовательный вопрос :)
Подскажите статьи по AJAX ASP.net 2.0, особенно интересует создание собственных компонентов на нем... (статьи от майкрософт уже читал) Заранее благодарю :)

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: Алексей
Добавлено:22.08.2007 / 15:36
Каких еще компонентов?

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 2 | Автор: Bille Gates
Добавлено:22.08.2007 / 15:45
Ну там-же есть отдельные самописные скрипты... точнее будут, если научусь... :) даже при установке аякса в Visual Studio появляется в окне new project доп. иконка... которая позволяет писать код для создания компонентов AJAX или дополнять их...

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 3 | Автор: Алексей
Добавлено:22.08.2007 / 15:57
JavaScript в зубы и вперед :)

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Callback | Автор: Bille Gates
Добавлено: 22.08.2007 / 14:59 | ответов: 0 | просмотров: 18

И снова для общего развития, хочу спросить, как пользоваться функцией callback в АСП, для чего она нужна я догадываюсь, но хочется услышать научно и понятно... :) знаю что она как-то используется и с AJAX... для общения от серверного кода с клиентским... в общем все что не лень об этой ф-ции расскажите... пожалуйста.

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Membership | Автор: Bille Gates
Добавлено: 22.08.2007 / 14:56 | ответов: 7 | просмотров: 72

Привет всем, давно я тут не постил, вот, решил ради приличия и общеобразования запостить вопросик :)
Интересно все про membership? т.е. как его использовать, настраивать, итп... :) ато надоело для каждого сайта делать регистрационный класс(переделывать под каждый сайт)

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: SocrAT
Добавлено:22.08.2007 / 15:13
Используй паттерны, ёпть!!!

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 2 | Автор: Алексей
Добавлено:22.08.2007 / 15:18
http://msdn2.microsoft.com/en-us/library/6e9y4s5t.aspx
или

ASP.NET 2.0. Обзор новых сервисов, элементов управления и средств (2 часть)



Источник: realcoding.net

Новшества в области администрирования



Еще один ощутимый недостаток ASP.NET, исправленный в ASP.NET 2.0, — полное отсутствие декларативных или программных интерфейсов, предназначенных для администрирования Web-сайтов. Раньше для изменения параметров конфигурации приходилось запускать Notepad и редактировать Machine.config или Web.config. С этим покончено. В ASP.NET 2.0 имеется развитой API администрирования, упрощающий чтение и запись параметров конфигурации. Кроме того, есть GUI администрирования, показываемый в браузере при запросе файла Webadmin.axd.

На момент написания статьи разработка Webadmin.axd еще не закончена. Он будет служить для конфигурирования различных сервисов, входящих в ASP.NET 2.0 (например сервисов управления членством и ролями), просмотра статистики Web-сайта и настройки параметров защиты.

Сервис управления членством



Одно из лучших новых средств ASP.NET 2.0 — сервис управления членством (membership service), предоставляющий удобный API для создания учетных записей пользователей и управления ими. С появлением ASP.NET 1.x началось массовое применение аутентификации на основе форм, но, чтобы применять такую аутентификацию на практике, по-прежнему приходилось писать довольно много кода. Сервис управления членством устраняет этот недостаток аутентификации на основе форм в ASP.NET 1.x и значительно упрощает написание кода аутентификации на основе форм.

Для работы с Membership API служат два новых класса: Membership и MembershipUser. Первый содержит статические методы для создания пользователей, их проверки и др. MembershipUser представляет отдельных пользователей и содержит методы и свойства для считывания и смены паролей, получения даты последнего входа и т. д. Например, следующий оператор принимает имя и пароль пользователя и возвращает true или false в зависимости от того, допустим ли этот пользователь. Такие операторы заменят вызовы использовавшихся в приложениях ASP.NET 1.x самодельных методов, которые проверяли удостоверения защиты через Active Directory или серверные базы данных:

001:
002:
003:
004:
bool isValid = Membership.ValidateUser (username, password);

_______________________
Colorized by: Eros.CodeSyntaxColor Engine


Следующий оператор возвращает объект MembershipUser, представляющий пользователя с именем jeffpro:

001:
002:
003:
004:
MembershipUser user = Membership.GetUser ("jeffpro");

_______________________
Colorized by: Eros.CodeSyntaxColor Engine


Наконец, следующий оператор считывает адрес электронной почты зарегистрированного пользователя (предполагается, что этот адрес был сохранен):

001:
002:
003:
004:
string email = user.Email;

_______________________
Colorized by: Eros.CodeSyntaxColor Engine


Где хранятся имена пользователей, пароли и другие данные, c которыми работает сервис управления членством? Как и почти все сервисы ASP.NET 2.0, управляющие состоянием, этот сервис основан на провайдерах. Провайдеры — модули, позволяющие сервисам взаимодействовать с физическими источниками данных. В ASP.NET 2.0 будут входить провайдеры управления членством для баз данных Microsoft Access, SQL Server, службы каталогов Active Directory и, вероятно, для других источников данных. Вы можете написать собственные провайдеры для каких-либо источников данных. Роб Говард (Rob Howard), менеджер программы в группе Microsoft Web Platform and Tools детально рассмотрел эту тематику в статье «Nothin» But ASP.NET», доступной по ссылке http://msdn.microsoft.com/library/en-us/dnaspnet/html/asp02182004.asp.

По умолчанию сервис управления членством использует провайдер Access и хранит данные о членстве в файле AspNetDB.mdb, находящемся в подкаталоге Data приложения. Можно выбрать другие провайдеры, указав их в разделе <membership> файла Web.config. Редактировать Web.config вручную необязательно, его можно изменить с помощью Webadmin.axd. Следующий фрагмент взят из Web.config после того, как через Webadmin.axd я создал базу данных SQL Server с именем WhidbeyLogin и настроил сервис управления членством на ее использование:

001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
<membership defaultProvider="WhidbeyLogin">
<providers>
    <add name="WhidbeyLogin"
      type="System.Web.Security.SqlMembershipProvider, ..."
      connectionStringName="webAdminConnection632112624221191376"
      applicationName="/Whidbey" requiresUniqueEmail="false"
      enablePasswordRetrieval="true" enablePasswordReset="false"
      requiresQuestionAndAnswer="false"
      passwordFormat="Encrypted" />
</providers>
</membership>


Атрибут connectionStringName ссылается на строку подключения, содержащуюся в новом разделе <connectionStrings> файла Web.config. В ASP.NET 2.0 эту часть Web.config можно зашифровать, чтобы защитить строки подключения к базе данных.

Область применения Webadmin.axd не ограничивается созданием баз данных и выбором провайдеров управления членством. Это средство годится для создания пользователей, управления удостоверениями защиты и для других целей. Webadmin.axd и Membership API предоставляют декларативные и программные средства управления зарегистрированными пользователями вашего сайта. Это огромный шаг вперед по сравнению с ASP.NET 1.x, где проблему управления удостоверениями приходилось решать в основном своими силами.

Элементы управления регистрацией



Сервис управления членством значительно сократил объем кода, необходимого для проверки регистрационных данных и управления пользователями. Но, кроме этого сервиса, введено новое семейство элементов управления, называемых элементами управления регистрацией (login controls), которые еще больше упростили аутентификацию на основе форм. Такие элементы можно использовать как совместно с сервисом управления членством, так и без него. Однако они настолько хорошо интегрируются с этим сервисом, что при совместном использовании сервиса управления членством и элементов управления регистрацией типичные задачи вроде проверки имен и паролей пользователей и отправки забытых паролей по электронной почте можно решать без единой строки кода. Во врезке «Новые элементы управления, планируемые в ASP.NET 2.0» дан список элементов управления регистрацией, которые предполагается включить в ASP.NET 2.0.

Элемент Login, показанный на рис. , — центральный элемент семейства. Он не только предоставляет гибко настраиваемый UI, но и может вызывать метод Membership.ValidateUser для проверки имени и пароля пользователя. Login также может вызвать метод FormsAuthentication.RedirectFromLoginPage, чтобы перенаправить пользователя на страницу, которую он пытался получить перед тем, как был направлен на страницу входа. Затем FormsAuthentication.RedirectFromLoginPage создает аутенификационные cookie. Позже я покажу, как работают Login и другие элементы управления регистрацией.

Диспетчер ролей



Сервис управления членством и элементы управления регистрацией были бы неполными без поддержки защиты на основе ролей. В ASP.NET 1.x, чтобы использовать роли при аутентификации на основе форм, приходилось писать код, сопоставляющий информацию о ролях каждому поступающему запросу. В ASP.NET 2.0 введен диспетчер ролей, применяемый отдельно или совместно с сервисом управления членством. Диспетчер ролей избавляет от необходимости писать такой код и упрощает авторизацию доступа пользователей к различным ресурсам, основанную на ролях.

Управление ролями опирается на провайдеры и активизируется в Web.config. У диспетчера ролей есть API, реализованный в новом классе Roles, содержащем такие методы, как CreateRole, DeleteRole и AddUserToRole. Важно отметить, что вы можете вообще не вызывать эти методы, поскольку Webadmin.axd полностью поддерживает создание ролей, их назначение пользователям и т. д. Достаточно один раз активизировать защиту на основе ролей, и дальше она «просто работает», используя заданную информацию о ролях и директивы авторизации URL в файлах Web.config, уже знакомые вам по ASP.NET 1.x.

Познакомившись с сервисом управления членством, элементами управления регистрацией и диспетчером ролей, вы, наверное, хотели бы увидеть пример использования этих трех средств. В примеры кода к этой статье, которые вы можете скачать, входит двухстраничное приложение, демонстрирующее аутентификацию на основе форм в стиле Visual Studio 2005. Чтобы развернуть приложение и посмотреть, как оно работает, сначала скопируйте файлы PublicPage.aspx, LoginPage.aspx и Web.config в виртуальный каталог вашего Web-сервера. Создайте в виртуальном каталоге подкаталог Secure и скопируйте в него ProtectedPage.aspx и еще один файл Web.config.

Запустите Webadmin.axd и настройте сайт на поддержку аутентификации на основе форм, сервиса управления членством и диспетчера ролей, выбрав провайдер по своему усмотрению. Создайте пользователей Bob и Alice и роли Manager и Developer. Назначьте пользователю Bob роль Manager, а Alice — роль Developer. (Я не буду перечислять все выполняемые для этого операции, поскольку они скорее всего изменятся еще до того, как вы прочитаете статью. К счастью, интерфейс средства Webadmin.axd вполне понятен интуитивно, и в Webadmin.axd есть мастера, помогающие выполнить настройку.)

Далее откройте PublicPage.aspx в браузере и щелкните кнопку View Secret Message, чтобы посмотреть ProtectedPage.aspx. ASP.NET перенаправит вас на LoginPage.aspx, в которой для запроса имени и пароля пользователя применяется элемент Login. Войдите, указав имя и пароль пользователя Bob. Страница ProtectedPage.aspx откроется в браузере, поскольку Bob имеет роль Manager, а файл Web.config в каталоге Secure разрешает доступ менеджерам. Заметьте: в элементе LoginName показывается имя пользователя, а в элементе LoginStatus — ссылка Log out. Наконец, закройте браузер, снова запустите его и откройте PublicPage.aspx. Щелкните View Secret Message и войдите как Alice. На этот раз вы не сможете открыть ProtectedPage.aspx, так как Alice не является менеджером.

Я использовал аналогичное приложение для обучения аутентификации на основе форм в ASP.NET 1.x, но для версии 1.x пришлось написать гораздо больше кода. Версия 2.0 заслуживает похвалы за краткость кода — особенно за то, что не нужно писать код проверки удостоверений, введенных в форму входа, или сопоставлять имена пользователей ролям. Если вы до сих пор сомневаетесь, попробуйте написать то же самое приложение в ASP.NET 1.x! Кроме того, посмотрите изменения, внесенные Webadmin.axd в Web.config. Помимо всего прочего, вы увидите элемент <roleManager>, который активизирует диспетчер ролей и обычно задает провайдер, используемый при управлении ролями.

Возможно, вас интересует, выполняется ли при каждом запросе обмен информацией между диспетчером ролей и базой данных, где хранятся роли. К счастью, нет. Диспетчер ролей хранит роли в cookie, причем шифрует их для конфиденциальности. В том невероятном случае, когда пользователю назначено так много ролей, что размера cookie не хватает для их хранения, cookie содержит список последних ролей, а запрос к базе данных применяется лишь при необходимости.

Персонализация



Еще одна новинка — сервис персонализации, предоставляющий готовое решение для хранения персональных параметров, задаваемых посетителями сайта. В настоящее время такие параметры обычно хранят в cookie, в серверных базах данных или и там, и там. Независимо от того, где они хранятся, ASP.NET 1.x мало чем помогает в этом случае. Приходится своими силами создавать и настраивать серверное хранилище этих данных и получать данные персонализации по именам пользователей, прошедших аутентификацию, по cookie или каким-то другим способом.

Сервис персонализации ASP.NET 2.0 облегчает хранение и считывание персональных параметров пользователей. Он основан на профилях пользователей. Профили определяются в Web.config с помощью нового элемента <profile>. Ниже приведен фрагмент файла Web.config:

001:
002:
003:
004:
005:
006:
007:
<profile>
<properties>
    <add name="Theme" />
    <add name="Birthday" Type="System.DateTime" />
    <add name="LoginCount" Type="System.Int32" defaultValue="0" />
</properties>
</profile>


В нем определен профиль, содержащий три свойства: Theme строкового типа, Birthday типа DateTime и LoginCount целого типа. Последнее по умолчанию равно 0.

В период выполнения можно обращаться к этим свойствам текущего пользователя через свойство Profile страницы, которое ссылается на экземпляр динамически скомпилированного класса со свойствами, заданными в профиле. Например, следующие операторы считывают значения свойств из профиля текущего пользователя:

001:
002:
003:
004:
005:
006:
string theme = Profile.Theme;
DateTime birthday = Profile.Birthday;
int logins = Profile.LoginCount;

_______________________
Colorized by: Eros.CodeSyntaxColor Engine


Свойствам профиля можно присваивать значения:

001:
002:
003:
004:
005:
006:
Profile.Theme = "SmokeAndGlass";
Profile.Birthday = new DateTime (1959, 9, 30);
Profile.LoginCount = Profile.LoginCount + 1;

_______________________
Colorized by: Eros.CodeSyntaxColor Engine


Очевидным преимуществом персонализации является строгая типизация. Еще одно преимущество — то, что данные персонализации считываются и записываются по запросу. Этим они отличаются от состояния сеанса, которое загружается и сохраняется при каждом запросе независимо от того, используется оно или нет. Но, пожалуй, самое главное преимущество сервиса персонализации — не нужно явно задавать, где хранятся данные персонализации; система делает это за вас и хранит их постоянно. Когда эти данные потребуются, вы легко сможете обратиться к ним. В отличие от сеансов у профилей не истекает время ожидания.

Так где же хранятся данные персонализации? Возможны варианты. Сервис персонализации основан на провайдерах, поэтому его можно настроить на использование любого доступного провайдера. В ASP.NET 2.0 войдут минимум два провайдера персонализации: для Access и для SQL Server. Если не указано иное, сервис персонализации использует провайдер для Access, по умолчанию хранящий данные персонализации локально в DataAspNetDB.mdb. Вместо Access можно задействовать SQL Server, изменив Web.config вручную или через Webadmin.axd. Если вы не хотите хранить данные персонализации ни в Access, ни в SQL Server, пишите свой провайдер.

По умолчанию ASP.NET использует в качестве ключа к данным персонализации имя аутентифицированного пользователя, но можно настроить ASP.NET и на поддержку персонализации для анонимных пользователей. Прежде всего вы должны разрешить анонимную идентификацию, добавив в Web.config:

001:
<anonymousIdentification enabled="true" />


Затем добавьте allowAnonymous=true в свойства профиля, которые вы хотите хранить для анонимных пользователей:

001:
<name="Theme" allowAnonymous="true" />


Теперь свойство Theme будет доступно как персональный параметр независимо от того, прошли ли аутентификацию пользователи, которые обращаются к вашему сайту.

По умолчанию при анонимной идентификации, чтобы идентифицировать пользователей, повторно посещающих сайт, используются cookie. С помощью атрибутов, указываемых в <anonymousIdentification>, можно различными способами настроить эти cookie. Например, задать имя cookie и указать, надо ли шифровать содержимое cookie. Или настроить сервис персонализации на анонимную аутентификацию без cookie, при которой для идентификации пользователя, повторно посещающего сайт, применяется передача идентификатора сеанса через URL (URL munging). Предусмотрена даже возможность автоматического определения: если выполняющий запрос браузер поддерживает cookie, используются cookie, а в ином случае идентификатор сеанса передается в URL.

Чтобы посмотреть, как работает персонализация, запустите один из примеров кода к статье — Personalize.aspx. Эта страница позволяет каждому посетителю сайта выбрать тему, затем запоминает ее и применяет всякий раз, когда посетитель возвращается на сайт. Заметьте: тема программно применяется к странице в PreInit — новом событии, которое происходит перед Init.

Перед запуском примера разрешите анонимную аутентификацию и определите профиль, содержащий строковое свойство Theme. Следующий фрагмент кода из файла Web.config показывает, как решить эти две задачи:

001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
<configuration>
<system.web>
    <anonymousIdentification enabled="true" />
    <profile>
      <properties>
        <property name="Theme" allowAnonymous="true" />
      </properties>
    </profile>
</system.web>
</configuration>


Зависимости кэша от SQL-данных



Еще одна возможность, которой сильно не хватало в ASP.NET 1.x, — поддержка зависимостей кэша от базы данных. Элементы, помещаемые в кэш приложения ASP.NET, могли зависеть от других кэшированных элементов или объектов файловой системы, но не от записей базы данных. В ASP.NET 2.0 этот недостаток исправлен введением зависимостей кэша от SQL-данных (SQL cache dependencies).

Зависимости кэша от SQL-данных представляются экземплярами нового класса SQLCacheDependency. Применять их — проще некуда. Следующий оператор вставляет DataSet с именем ds в кэш приложения и создает зависимость между DataSet и таблицей Products базы данных Northwind:

001:
002:
003:
004:
Cache.Insert ("ProductsDataSet", ds, new SqlCacheDependency ("Northwind", "Products");

_______________________
Colorized by: Eros.CodeSyntaxColor Engine


Если содержимое таблицы Products изменится, ASP.NET автоматически удалит DataSet.

Зависимости кэша от SQL-данных можно использовать и в кэше вывода ASP.NET. Следующая директива указывает ASP.NET, что вывод страницы, содержащей данные, кэшируется до тех пор, пока не изменится содержимое таблицы Products или пока не пройдет 60 секунд (смотря что случится раньше):

001:
<%@ OutputCache Duration="60" VaryByParam="None" SqlDependency="Northwind:Products" %>


Зависимости кэша от SQL-данных можно использовать при работе с SQL Server 7.0, SQL Server 2000 и с будущей версией SQL Server 2005. SQL Server 2005 будет поддерживать зависимости кэша от SQL-данных без какой-либо предварительной настройки, а SQL Server 7.0 и SQL Server 2000 для поддержки этих зависимостей придется соответствующим образом сконфигурировать. Конфигурирование заключается в создании триггеров базы данных и специальной таблицы, к которой ASP.NET обращается, чтобы определить, внесены ли изменения. Эта таблица периодически опрашивается фоновым потоком через интервал, который задается при настройке и по умолчанию равен пяти секундам. В SQL Server 2005, чтобы определить, внесены ли изменения, не потребуются ни специальная таблица, ни периодический опрос. Кроме того, зависимости кэша от данных SQL Server 2005 можно применять на уровне записей, а зависимости кэша от данных SQL Server 7.0 ;или SQL Server 2000 работают на уровне таблиц. Чтобы настроить базу данных на поддержку зависимостей кэша от SQL-данных, можно воспользоваться утилитой Aspnet_regsqlcache.exe или Webadmin.axd.

Новая модель динамической компиляции



Одно из многих новшеств ASP.NET 1.x заключалось в том, что система могла компилировать код при первом обращении к нему. Однако автоматически компилировались только страницы, а вспомогательные классы, такие как компоненты доступа к данным, приходилось компилировать отдельно.

ASP.NET 2.0 расширяет модель динамической компиляции: теперь практически все можно компилировать автоматически. Каталог bin по-прежнему существует для обратной совместимости, но теперь его дополняют каталоги Code и Resources. Файлы с кодом на C# и Visual Basic в каталоге Code и файлы .resx и .resource в каталоге Resources автоматически компилируются ASP.NET и кэшируются в системных подкаталогах. Более того, WSDL-файлы (Web Services Description Language), скопированные в каталог Code, компилируются в прокси Web-сервисов, а XSD-файлы (XML Schema Definition Language) — в типизированные DataSet. Отредактировав файл Web.config, можно расширить применение этих каталогов, настроив поддержку динамической компиляции для других типов файлов.

Предкомпиляция и развертывание без исходного кода



Когда речь заходит о динамической компиляции, один из наиболее часто задаваемых вопросов по ASP.NET 1.x — можно ли заранее компилировать страницы, чтобы при первом обращении к странице не было задержки из-за затрат времени на компиляцию. Сам по себе вопрос не совсем корректен (задержка минимальна и связанные с ней издержки пренебрежимо малы, если принять во внимание, что потом выполняются тысячи или даже миллионы запросов). Тем не менее Microsoft посчитала своим долгом сделать кое-что, чтобы облегчить жизнь разработчикам. Это «кое-что» — возможность заранее скомпилировать все страницы приложения, отправив запрос фантомному ресурсу precompile.axd.

Но это еще не все, что сделано в области предкомпиляции. Еще одна широко востребованная возможность — способность заранее компилировать все приложения в управляемые сборки, которые допускается развертывать без исходного кода, что особенно удобно при хостинге. В ASP.NET 2.0 введена новая утилита командной строки — Aspnet_compiler.exe, которая выполняет предкомпиляцию и развертывание без исходного кода; в Visual Studio 2005 войдет аналогичное средство. Следующая команда выполняет предкомпиляцию приложения в каталоге Web1 и развертывает его без исходного кода в каталоге Web2:

001:
Aspnet_compiler -v /web1 -p c:web1 c:web2


После выполнения команды каталог назначения содержит пустые файлы ASP.NET (ASPX, ASCX, ASIX и т. д.) и копии любого статического содержимого исходного каталога: HTML-файлы, .config-файлы и файлы изображений. Развертывание без исходных текстов не обеспечивает «железную» защиту вашей интеллектуальной собственности (поскольку квалифицированный сотрудник Интернет-провайдера все равно сможет разобраться в вашем приложении, декомпилировав сгенерированные сборки), но значительно поднимает барьер перед обычными взломщиками кода.

Новая модель разделения кода



ASP.NET 1.x поддерживает две программные модели: встраиваемого кода (inline model), в которой HTML и код сосуществуют в одном ASPX-файле, и отделенного (codebehind model), где HTML хранится отдельно в ASPX-файле, а код содержится в файлах исходного кода (например в C#-файлах). В ASP.NET 2.0 вводится третья модель: новая форма отделенного кода, основанная на поддержке частичных классов компиляторами Visual C# и Visual Basic .NET. Новая модель призвана исправить неприятный недостаток исходной модели; он заключался в том, что традиционные классы отделенного кода должны были содержать защищенные поля, чьи имена и типы сопоставляются элементам управления, объявленным в ASPX-файле.

В листингах 710 и 8 показано, как работает новая модель отделенного кода. Hello.aspx содержит декларативную часть страницы, а Hello.aspx.cs — код. Обратите внимание на атрибут CompileWith в директиве @ Page. Также заметьте, что в классе MyPage отсутствуют какие бы то ни было поля, сопоставляемые элементам управления, объявленным в ASPX-файле. Старая модель отделенного кода по-прежнему поддерживается, но в дальнейшем предпочтение будет отдаваться новой модели. Не удивительно, что в Visual Studio 2005 будет встроена поддержка новой модели разделения кода.

Листинг 7. Модель отделенного кода. Файл Hello.aspx

001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
<%@ Page CompileWith="Hello.aspx.cs" ClassName="MyPage" %>

<html>
<body>
    <form runat="server">
      <asp:TextBox ID="Input" RunAt="server" />
      <asp:Button Text="Test" OnClick="OnTest" RunAt="server" />
      <asp:Label ID="Output" RunAt="server" />
    </form>
</body>
</html>


Листинг 8. Модель отделенного кода. Файл Hello.aspx.cs

001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
using System;

partial class MyPage
{
  void OnTest (object sender, EventArgs e)
  {
    Output.Text = "Hello, " + Input.Text;
  }
}

_______________________
Colorized by: Eros.CodeSyntaxColor Engine


Клиентский диспетчер обратных вызовов



Одна из моих любимых функций ASP.NET 2.0 — «облегченный» возврат формы («lightweight» postback), обеспечиваемый клиентским диспетчером обратных вызовов. Раньше страницы ASP.NET, чтобы вызвать код на стороне сервера, должны были возвратить форму серверу. Возвраты формы неэффективны, так как возвращаются все данные, сгенерированные элементами управления страницы. Кроме того, при возврате формы выполняется актуализация страницы, что вызывает неприятное мигание.

В ASP.NET 2.0 вводится клиентский диспетчер обратных вызовов, позволяющий страницам выполнять обратные вызовы сервера без полного возврата формы. Обратные вызовы асинхронны и выполняются с использованием XML-HTTP. В их данные не включаются возвращаемые данные (postback data), и они не приводят к актуализации страницы. (На серверной стороне до события PreRender страница обрабатывается, как обычно, но затем обработка прекращается, поэтому HTML-данные заново не отображаются.) При этом браузер должен поддерживать протокол XML-HTTP, т. е. нужен Microsoft Internet Explorer версии 5.0 или выше.

Для использования клиентского диспетчера обратных вызовов требуется выполнить три операции. Во-первых, вызовите Page.GetCallbackEventReference, чтобы получить функцию, вызываемую из клиентского сценария для обратного вызова сервера по протоколу XML-HTTP. ASP.NET вернет имя и реализацию этой функции. Во-вторых, напишите метод клиентского сценария, вызываемый, когда обратный вызов возвращает управление. Имя метода — один из аргументов, передаваемых GetCallbackEventReference. В-третьих, реализуйте в странице интерфейс ICallbackEventHandler. В нем содержится единственный метод RaiseCallbackEvent, вызываемый на стороне сервера, когда выполняется обратный вызов. Строка, возвращаемая RaiseCallbackEvent, передается методу, о котором говорилось в описании предыдущей операции.

Код в листинге 9 показывает, как работают клиентские обратные вызовы, и демонстрирует одно из наиболее типичных практических применений таких вызовов. Страница выводит форму, запрашивающую имя и адрес. Введите ZIP-код 378xx или 379xx в поле Zip Code и щелкните кнопку Autofill — в поле City появится название города. Страница обращается к серверу, чтобы получить название города, причем для этого выполняется клиентский обратный вызов, а не полный возврат формы. На практике для преобразования ZIP-кода в название города скорее всего выполнялся бы запрос к базе данных. Заметьте: страница не перерисовывается в отличие от ситуаций, когда используется возврат формы серверу. Информация на странице обновляется быстро и корректно!

Листинг 9. Callback.aspx

001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
026:
027:
028:
029:
030:
031:
032:
033:
034:
035:
036:
037:
038:
039:
040:
041:
042:
043:
044:
045:
046:
047:
048:
049:
050:
051:
052:
053:
054:
055:
056:
057:
058:
059:
060:
061:
062:
063:
064:
065:
066:
067:
068:
069:
070:
071:
072:
073:
074:
075:
076:
077:
078:
079:
080:
081:
082:
083:
084:
085:
086:
087:
088:
089:
<%@ Implements Interface="System.Web.UI.ICallbackEventHandler" %>

<html>
<body>
  <h1>Please Register</h1>
  <hr>
  <form runat="server">
   <table>
    <tr>
     <td>First Name</td>
     <td><asp:TextBox ID="FirstName" RunAt="server" /></td>
     <td></td>
    </tr>
    <tr>
     <td>Last Name</td>
     <td><asp:TextBox ID="LastName" RunAt="server" /></td>
     <td></td>
    </tr>
    <tr>
     <td>Address 1</td>
     <td><asp:TextBox ID="Address1" RunAt="server" /></td>
     <td></td>
    </tr>
    <tr>
     <td>Address 2</td>
     <td><asp:TextBox ID="Address2" RunAt="server" /></td>
     <td></td>
    </tr>
    <tr>
     <td>City</td>
     <td><asp:TextBox ID="City" RunAt="server" /></td>
     <td></td>
    </tr>
    <tr>
     <td>State</td>
     <td><asp:TextBox ID="State" RunAt="server" /></td>
     <td></td>
    </tr>
    <tr>
     <td>Zip Code</td>
     <td><asp:TextBox ID="Zip" RunAt="server" /></td>
     <td><asp:Button ID="AutofillButton" Text="Autofill"
      RunAt="server" /></td>
    </tr>
   </table>
  </form>
</body>
</html>

<script language="javascript">
// Функция, вызываемая, когда обратный вызов возвращает управление
function __onCallbackCompleted (result, context)
{
  // Показываем в поле ввода "City" строку,
  // возвращаемую методом RaiseCallbackEvent сервера
  document.getElementById (City).value = result
}
</script>

<script language="C#" runat="server">
void Page_Load (object sender, EventArgs e)
{
  // Получаем код события обратного вызова
  // (например "__doCallback (...)")
  string cbref = GetCallbackEventReference (this,
    "document.getElementById (Zip).value",
    "__onCallbackCompleted", "null", "null");

  // Связываем событие обратного вызова с кнопкой Autofill
  // через атрибут onclick (и добавляем "return false" в код
  // события, чтобы не было возврата формы)
  AutofillButton.Attributes.Add ("onclick",
    cbref + "; return false;");
}

// Обработчик события обратного вызова на серверной стороне
string ICallbackEventHandler.RaiseCallbackEvent (string arg)
{
  if (arg.StartsWith ("378"))
    return "Oak Ridge";
  else if (arg.StartsWith ("379"))
    return "Knoxville";
  else
    return "Unknown";
}
</script>

_______________________
Colorized by: Eros.CodeSyntaxColor Engine


Заключение



В ASP.NET 2.0 много других новых средств, не рассмотренных в статье. Например, встроенный сервис ведения статистики сайта (site-counter service) позволяет вести статистику использования сайта и просматривать ее в Webadmin.axd или в GUI собственной разработки. Новая подсистема Web Parts предоставляет инфраструктуру для разработки порталов в стиле SharePoint Server. Интегрированная поддержка мобильных устройств означает, что больше не придется устанавливать отдельный инструментальный набор, чтобы адаптировать вывод к PDA и другим устройствам с небольшим объемом памяти. Внесена масса усовершенствований в существующие элементы управления, благодаря чему они стали более гибкими средствами разработки Web-страниц, основанных на компонентах.

Пора уже сейчас приступать к ознакомлению с ASP.NET 2.0: зная, что появится в новой версии (и что не появится), вы сможете уже сегодня планировать архитектуру, на которую будет легко перейти завтра. Ваши приложения для ASP.NET 1.x должны работать в версии 2.0 без изменений, поскольку Microsoft пообещала, что обеспечит совместимость со старой платформой. Но будущее принадлежит ASP.NET 2.0, и в этом будущем вы сможете получить более мощную функциональность с меньшими усилиями. Неужели вы этому не рады?

и так до бесконечности..

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 3 | Автор: Bille Gates
Добавлено:22.08.2007 / 15:19
Меня это не волнует :) мне просто интересно узнать о membership ибо это технология от MS и если я хочу считаться более или менее профессионалом в программировании, то я должен знать как это работает...

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 4 | Автор: Bille Gates
Добавлено:22.08.2007 / 15:24
простите пост: "Меня это не волнует :) мне просто интересно узнать о membership ибо это технология от MS и если я хочу считаться более или менее профессионалом в программировании, то я должен знать как это работает..."
-не относился к ответу Алексея... видимо я просто долго писал :) пост был ответом SoqcrATу

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 5 | Автор: Алексей
Добавлено:22.08.2007 / 15:29
Меня это не волнует :) мне просто интересно узнать о membership ибо это технология от MS и если я хочу считаться более или менее профессионалом в программировании, то я должен знать как это работает...

Тебе вовсе не надо знать, как работает membership, тебе достаточно
знать и самое главное понимать ООП .NET, тогда ты сможешь работать с тем, что даже еще не придумали :)
А как это работает тебе объяснять бессмысленно, и если ты будешь
продолжать копать, то рано или поздно сам сможешь ответить на свой вопрос.

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 6 | Автор: SocrAT
Добавлено:22.08.2007 / 15:47
Извиняюсь за оффтоп, но ТАК мой ник еще не коверкали.

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 7 | Автор: Bille Gates
Добавлено:22.08.2007 / 16:01
извиняюсь... не со зла :) очепятка :)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Context Menu Shell Extension / VB.NET | Автор: 5acred Phoenix
Добавлено: 21.08.2007 / 21:19 | ответов: 9 | просмотров: 95

Доброе время суток!

Нашёл статью о том, как писать Shell Extensions под managed-кодом: http://www.theserverside.net/tt/articles/showarticle.tss?id=ShellExtensions.

На основе этой статьи (ну и прилагаемых к ней сурсов, естественно) на свет был рождён вариант extension'а на VB.NET. Всё бы ничего, да только функция QueryContextMenu(), ответственная за изменение одноимённого меню у файлов, системой вызывается 3 раза вместо одного. А саб InvokeCommand(), который по идее должен реагировать на клики по добавленным пунктам, не работает вообще. Кстати говоря, вариант на C# работает на ура. Различий в обоих вариантах вроде как не вижу...

Посмотрите, пожалуйста, что не так. Мои сурсы можно скачать здесь: http://sacredphoenix.nm.ru/MyShellExt.rar. Единственное, в них замените в объявлении структуры MENUITEMINFO атрибут около dwTypeData на <MarshalAs(UnmanagedType.LPWStr)>. Как включить extension я в двух словах описал в Readme.txt, но проблем здесь возникнуть не должно.

ЗЫ. Можно ли заданный мною вопрос в систему «Эксперт» удалить? Ибо описанная там проблема уже решена :)

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: 5acred Phoenix
Добавлено:21.08.2007 / 22:51
Дык эта хрень ещё и вызывает IShellExtInit::Initialize() 3 раза :(
Это помимо того, что IContextMenu::GetCommandString() и IContextMenu::InvokeCommand() не вызываются вообще..

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 2 | Автор: 5acred Phoenix
Добавлено:22.08.2007 / 14:41
Не, это беспредел.. Только что переписал расширение с нуля на си-шарпе. Работает как надо :\

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 3 | Автор: Алексей
Добавлено:22.08.2007 / 14:47
покажи код на шарпе

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 4 | Автор: 5acred Phoenix
Добавлено:22.08.2007 / 20:56
покажи код на шарпе

Вот две последние версии, на вб и шарпе. http://sacredphoenix.nm.ru/MyShellExt-2ver.rar

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 5 | Автор: 5acred Phoenix
Добавлено:22.08.2007 / 21:00
Точнее вот: http://sacredphoenix.nm.ru/MyShellExt-2ver.rar
У вас зачем-то линк к нижнему регистру приводится, сервер файл не находит :\

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 6 | Автор: Алексей
Добавлено:23.08.2007 / 04:16
У вас зачем-то линк к нижнему регистру приводится, сервер файл не находит

оптимизировано только для Win-хостингов :))))

Не, это беспредел.. Только что переписал расширение с нуля на си-шарпе. Работает как надо

Раз на шарпе работает, то юзай шарп, зачем тебе вб?

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 7 | Автор: 5acred Phoenix
Добавлено:23.08.2007 / 11:13
оптимизировано только для Win-хостингов :))))

О да, я заметил уже :-))

Раз на шарпе работает, то юзай шарп, зачем тебе вб?

Да я тоже об этом думал.. Но просто интересно разобраться, почему идентичный (или мне так кажется?) код на вб косячит.

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 8 | Автор: Алексей
Добавлено:23.08.2007 / 12:30
Да я тоже об этом думал.. Но просто интересно разобраться, почему идентичный (или мне так кажется?) код на вб косячит.

насчет идеинтичности ничего сказать не могу, я его посмотрел
поверхностно, уж больно он "большой" :) Раз косячит, значит, видимо он
не такой как на шарпе, если сам подазреваешь где могут быть косяки,
выкладывай куски кода в форум, посмотрим.

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 9 | Автор: 5acred Phoenix
Добавлено:23.08.2007 / 13:00
если сам подазреваешь где могут быть косяки, выкладывай куски кода в форум, посмотрим.

Непростое это дело :)

Через рефлектор стал сравнивать сборки, сделанные на вб и шарпе. Описания интерфейсов IShellExtInit и IContextMenu одинаковые. А вот реализации IDataObject отличаются: вариант на шарпе гласит
001:
002:
[PreserveSig]
int EnumDAdvise(ref object a);

в то время как вб
001:
002:
<PreserveSig> _
Function EnumDAdvice(ByRef a As Object) As Integer

Это может как-то влиять? Интерфейсы com-импортированные, GUID'ы в обоих сборках прописаны одинаковые.

Ещё могу грешить на какие-то особенности вб. Ибо вот описание структуры MENUITEMINFO на шарпе:
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
[StructLayout(LayoutKind.Sequential)]
public struct MENUITEMINFO
{
   public uint cbSize;
   public uint fMask;
   public uint fType;
   public uint fState;
   public int wID;
   public int /*HMENU*/ hSubMenu;
   public int /*HBITMAP*/ hbmpChecked;
   public int /*HBITMAP*/ hbmpUnchecked;
   public int /*ULONG_PTR*/ dwItemData;
   public String dwTypeData;
   public uint cch;
   public int /*HBITMAP*/ hbmpItem;
}

А вот на вб (видите аттрибут около dwTypeData?):
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
<StructLayout(LayoutKind.Sequential)> _
Public Structure MENUITEMINFO
   Public cbSize As UInteger
   Public fMask As UInteger
   Public fType As UInteger
   Public fState As UInteger
   Public wID As Integer
   Public hSubMenu As Integer
   Public hbmpChecked As Integer
   Public hbmpUnchecked As Integer
   Public dwItemData As Integer
   <MarshalAs(UnmanagedType.LPWStr)> _
   Public dwTypeData As String
   Public cch As UInteger
   Public hbmpItem As Integer
End Structure

Видимо, шарп и вб передают строки по-разному..

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Помогите с кастомизацией пейджера в GridView | Автор: Юрий.Н
Добавлено: 21.08.2007 / 14:26 | ответов: 1 | просмотров: 26

GridView с включенным пейджером генерирует HTML код:

001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
<table>
<!-- Data rows START -->
<tr>
  <td>...</td>
  ... ... ... ... ...
</tr>
<!-- Data rows END -->

<!-- Pager row -->
<tr>
  <td colspan=...>...</td>
</tr>
</table>


Таким образом, строка пейджера надежно "привязана" к таблице.
Мне же ПО ТРЕБОВАНИЯМ дизайна НЕОБХОДИМО зафиксировать пейджер в определенном месте страницы.
Вполне подходит такой HTML-результирующий код:

001:
002:
003:
004:
005:
006:
007:
008:
<div id=... class=...>
<table>
  <!-- Data rows -->
</table>
</div>
<div id=... class=...>
  <!-- Pager -->
</div>


Попытки найти решение в интернете не увенчались успехом.
Кто-то может помочь?

Спасибо.

Ответить на это сообщение | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Ответ # 1 | Автор: Алексей
Добавлено:21.08.2007 / 14:36
Создайте собственный пейджер, обычно так все и делают, либо можете поискать уже готовый на http://asp.net

_________________
Это сообщение добавлено через Kbyte.Ru Forum Mail Conference (FMC)

Добавить ответ | Посмотреть эту тему на сайте | Форум Kbyte.Ru


Наверх

 

Последние статьи

Взаимодействие с другими сайтами через HTTP (HttpWebRequest и HttpWebResponse)
Автор: Немиро Алексей | добавлено: 27.07.2007 / 14:01 | просмотров: 496

В данной статье речь пойдет о том, как можно программно заполнить и отправить Web-форму, а также получить результат с использованием довольно простых классов - HttpWebRequest и HttpWebResponse.

Работа с SQL – Запросы
Автор: Хабибулин А. (aka Bille Gates) | добавлено: 22.07.2007 / 04:43 | просмотров: 875

В данной статье рассмотрены часто используемые SQL-запросы и приведены примеры их использования.

Использование XML.Serialization
Автор: Немиро Алексей | добавлено: 19.07.2007 / 15:38 | просмотров: 218

В данном обзоре речь пойдет об использование XML.Serialization в .NET и ее применении на примере сохранения и считывания настроек программы с использованием синтаксиса языка Visual Basic .NET.

Выбор языка программирования для научных работ (2-я редакция)
Автор: Юдин С. Ю. | добавлено: 15.03.2007 / 02:49 | просмотров: 1957

Идея написания этой статьи возникла после того, как на одном из сайтов по физике http://physics.nad.ru/aniboard/messages/291.html я обнаружил интересный алгоритм моделирования движения тела в поле постоянной напряженности по различным направляющим. Вернее, меня заинтересовал не весь алгоритм, т.к. основа их всех одна (принцип Даламбера, если не считать квазиалгоритма с применением уравнений Лагранжа 2-го рода) и различаются они только способом определения реакций в месте соприкосновения тел. ...

Работаем с MIME
Автор: Немиро Алексей | добавлено: 29.11.2006 / 14:46 | просмотров: 1894

Не так давно мне пришлось немного поработать MIME (Multipurpose Internet Mail Extension) - это стандарт почтовых сообщений, в РуНете (Russian Internet) я не нашел нормального описания спецификации MIME, и посему решил написать небольшую статейку на эту тему. В данной статье вы узнаете об основных особенностях и стандартах MIME, а также научитесь «читать» MIME с использованием синтаксиса языка Visual Basic .NET 2005.

 

Статьи на Kbyte.Ru

Наверх

 

Интересные коды и решения

Как определить, загружена форма или нет?
Дата добавления: 31.07.2006 / 12:02 | просмотров: 551 | платформа: VB

Работа с группами ListView
Дата добавления: 23.08.2006 / 22:09 | просмотров: 993 | платформа: VB .NET

Преобразование строки в Double, исключая проблемы с разделителем
Дата добавления: 27.04.2007 / 15:53 | просмотров: 372 | платформа: VB .NET

Как получить текущее системное время?
Дата добавления: 16.08.2006 / 20:18 | просмотров: 1007 | платформа: VB

Анализ IP-адреса
Дата добавления: 24.03.2007 / 10:56 | просмотров: 315 | платформа: RegEx

Воспроизведение звукового файла #1
Дата добавления: 31.07.2006 / 12:53 | просмотров: 708 | платформа: VB

Любое число не равное нулю
Дата добавления: 24.03.2007 / 11:31 | просмотров: 253 | платформа: RegEx

Как загрузить изображение в PictureBox/Image?
Дата добавления: 16.08.2006 / 19:55 | просмотров: 697 | платформа: VB

Как сделать секундомер?
Дата добавления: 16.08.2006 / 23:26 | просмотров: 832 | платформа: VB

Программная обработка HTML-элементов управления
Дата добавления: 31.07.2006 / 16:25 | просмотров: 493 | платформа: ASP .NET (VB)

 

Универсальные коды на Kbyte.Ru

Наверх

 

Юмор на Kbyte.Ru

На открытии Олимпиады в Сиднее присутствовал Билл Гейтс.
Команда США выполнила недопустимую операцию и будет закрыта.

 

Рейтинг: 61
Всего голосов: 106
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Вовочка приходит домой.
В: мама, знаешь сегодня что в школе случилось?
-нет.
В: училка несла в класс клей, упала и приклеилась.
- ну и что? Вы ее отодрали?
В: да, а тот, кто смелый, тот и по-два раза...

 

Рейтинг: 28
Всего голосов: 38
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Зима. Замеpзший водоем. Hа лед выходит любитель подледного лова и пpистpаивается бypить лyнкy, как вдpyг откyда-то свеpхy гpомовой голос:
- МУЖИК! ЗДЕСЬ РЫБЫ HЕТ!!!
Мyжик огляделся - кpyгом никого. Плечами пожал, отошел метpов на сто, и опять свеpлить.
- МУЖИК!!! ЗДЕСЬ РЫБЫ HЕТ!!!!!
И опять кpyгом никого. Hy мyжик еще подальше отошел...
- МУЖИК!!!!!! Я ТЕ СКАЗАЛ - HЕТ ЗДЕСЬ РЫБЫ!!!!!!!!!!!!!
Мyжик не выдеpжал и обpатя взоp небy вскpичал:
- Да кто это говоpит?!!!
- КТО,КТО! ДИРЕКТОР КАТКА!!!

 

Рейтинг: 17
Всего голосов: 37
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Однажды меня вот так достали рекламой (повадились мне на факс спам кидать - бумагу тратят гады, а на нужный факс по закону подлости всегда бумаги не хватит), позвонил в офис от кого пришел факс (три метра бумаги) - вежливо попросил исключить мой номер из их рассылок. Через час от них пришел еще один факс длинной в метр ( видимо уже в воспитательных целях).
Пришлось настроить винфакс и в 24-00 по местному времени послам им в офис текстовой файл весом в 600 кб (инструкцию по проверке трансформаторов на подтанциях и проведения на них регламентных работ). Файл шел до того момента пока у них бумага не кончилась. Утром позвонил
и спросил: "Вы наш факс получили?". Реакция была блеск :))))))

 

Рейтинг: 110
Всего голосов: 151
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Наконец то русские хакеры покапались в програмном обеспечении ракеты "ТОМОГАВК" - теперь она называется "БУМЕРАНГ"

 

Рейтинг: 351
Всего голосов: 500
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Билл Гейтс: - Если бы автомобилестроение развивалось такими темпами, как компьютерная промышленность, то сегодня автомобили бы ездили со скоростью 600 км/ч и расходовали 2 литра бензина на 100 километров! General Motors: - Да, но хотелось бы вам чинить ваш автомобиль 2 раза в день?

 

Рейтинг: 393
Всего голосов: 550
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Приходит програмист с работы, а на него жена набрасывается с кулаками:
- Негодяй! Я столько лет тебя кормила, поила, ублажала, а ты, паразит, мне изменяешь!
- ???
- Не прикидывайся! Звонил Витька, спрашивал адрес твоей Аськи!

 

Рейтинг: 322
Всего голосов: 459
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Объявление: Куплю "Русско-московский разговорник", запарился!

 

Рейтинг: 74
Всего голосов: 126
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Пришел с выходного, говорят: "Интернет кончился" (денежка на счете кончилась). Чешу репу, середина месяца, дофига еще в субботу оставалось. Лезу в логи - всех прошерстил, у всех в рамках дозволенного. Последнего смотрю шефа.... За воскресение - месячный лимит. Печатаю, несу ему. Он выдает: "Странно, смотрел я, конечно, вчера пару-тройку фильмов, но ведь в ма-а-аленьком окошечке"...

 

Рейтинг: 621
Всего голосов: 890
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Приходит служащая и жалуется: компьютер зависает при включении. Прихожу и вижу: она включает комп, набирает пароль и ждёт. Грустными такими глазами смотрит на комп, а комп такими же грустными на неё. Я говорю: "А ENTER Пушкин будет нажимать?"

 

Рейтинг: 85
Всего голосов: 120
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

 

Весь юмор на Kbyte.Ru

Наверх


Выпуск подготовил: R-KDR-19826

Редактор: Немиро Алексей

Copyright (c) Nemiro AS, 2005-2007


В избранное