tag:blogger.com,1999:blog-24023151951245804402024-03-06T11:11:55.860+05:00Блог имени dedMazDаяИнтеграция Яндекс.Карты (Yandex.Maps), SQL Server; YMapsML; SQL tips; и многое другоеdedMazDiehttp://www.blogger.com/profile/18195725128796745204noreply@blogger.comBlogger17125tag:blogger.com,1999:blog-2402315195124580440.post-91422905191337599192012-01-21T21:54:00.000+06:002014-05-15T17:02:29.034+06:00Наконец то!!!<div dir="ltr" style="text-align: left;" trbidi="on">
Сделал бета-бета-...-бета-версию сайта на основе решений, которые до сих пор описывал.<br />
Ура! <a href="http://www.ufaautoguide.ru/">Смотрим</a>.</div>
dedMazDiehttp://www.blogger.com/profile/18195725128796745204noreply@blogger.com10tag:blogger.com,1999:blog-2402315195124580440.post-83510104337177495632011-08-09T16:47:00.000+06:002011-08-09T16:47:06.432+06:00MVC. Каскадные выпадающие списки<div dir="ltr" style="text-align: left;" trbidi="on"><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:PunctuationKerning/> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]> <style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Обычная таблица";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style> <![endif]--> <br />
<div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Возникла необходимость добавить в проект <b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;">MVC</i></b> каскадные выпадающие списки (<b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Cascade</span><span lang="EN-US"> </span></i></b><b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">DropDownList</span></i></b>). Т.е., чтоб при выборе значения в первом списке, соответственно обновлялся второй список. Рассмотрим этот случай на примере предыдущих статей. Пример будет несколько притянут за уши, но смысл будет понятен, думаю.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Конечно же, нашим спасителем опять станет <b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;">jQuery</i></b>, без него никак. Итак, начнем.<span lang="EN-US" style="mso-ansi-language: EN-US;"></span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">В нашей таблице <i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Map</span></i> есть поле <i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">ObjType</span></i>, которое указывает тип объекта – автосервис/азс. Пусть автосервисы делятся на собственно СТО и пункты замены масла, а азс – на собственно азс и агзс (газовая азс). Тогда в первом списке должно быть «1, 2», а во втором или «СТО, пункт замены масла», или «азс, агзс». Для хранения видов объектов создадим таблицу (листинг 1).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 1</b> – Виды объектов</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span style="color: blue; font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;">CREATE</span><span style="font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;"> <span style="color: blue;">TABLE</span> [dbo]<span style="color: grey;">.</span>[MapObjectType] <span style="color: grey;">(</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span style="font-family: "Courier New"; font-size: 10.0pt; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-no-proof: yes;">[MapObjType_id] <span style="color: blue;">bigint</span> <span style="color: blue;">IDENTITY</span><span style="color: grey;">(</span>1<span style="color: grey;">,</span> 1<span style="color: grey;">)</span> <span style="color: grey;">NOT</span> <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>[ObjType] <span style="color: blue;">int</span> <span style="color: grey;">NOT</span> <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>[TypeName] <span style="color: blue;">nvarchar</span><span style="color: grey;">(</span>64<span style="color: grey;">)</span> <span style="color: blue;">COLLATE</span> Cyrillic_General_CI_AS <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10.0pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">CONSTRAINT</span> [MapObjectType_pk] <span style="color: blue;">PRIMARY</span> <span style="color: blue;">KEY</span> <span style="color: blue;">CLUSTERED</span> <span style="color: grey;">(</span>[MapObjType_id]<span style="color: grey;">)</span></span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><span style="color: grey; font-family: "Courier New"; font-size: 10.0pt; line-height: 150%; mso-no-proof: yes;">)</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Никаких внешних ключей делать не будем, т.к. этот пример у нас искусственный, но в боевых условиях ключи делать обязательно. </div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">В <i style="mso-bidi-font-style: normal;">MapDataModel.edmx</i> делаем обновление, чтоб сгенерировались сущности для новой таблицы. Теперь в представлении для редактирования нам надо заменить <i style="mso-bidi-font-style: normal;">@</i><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Html</span>.</i><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">EditorFor</span>()</i> на <i style="mso-bidi-font-style: normal;">@</i><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Html</span>.</i><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">DropDownListFor</span>()</i> для поля <i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">ObjType</span></i>. Для этого нужно сформировать список, в котором «сидят» все возможные <i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">ObjType</span></i>. Для формирования этого списка создадим специальную модель <i style="mso-bidi-font-style: normal;">EntitySetToList.cs</i> (листинг 2).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 2</b> – Формирования списка для <i style="mso-bidi-font-style: normal;">DropDownList</i></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: blue;">static</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">EntitySetToList</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: blue;">static</span> <span style="color: #2b91af;">List</span><<span style="color: #2b91af;">SelectListItem</span>> ConvertParent()</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">DataManager</span> dm = <span style="color: blue;">new</span> <span style="color: #2b91af;">DataManager</span>();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">List</span><<span style="color: #2b91af;">SelectListItem</span>> items = <span style="color: blue;">new</span> <span style="color: #2b91af;">List</span><<span style="color: #2b91af;">SelectListItem</span>>();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">var</span> parent = dm.GetMapObjets;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">foreach</span> (<span style="color: blue;">var</span> item <span style="color: blue;">in</span> parent)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>items.Add(<span style="color: blue;">new</span> <span style="color: #2b91af;">SelectListItem</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>Text = item.ObjType.ToString(),</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span>Value = item.ObjType.ToString()</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>});</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">return</span> items;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span style="font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Тут мы получаем перечень всех объектов карты и в цикле формируем список типа <i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">List</span><</i><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">SelectListItem</span>></i>, который будет удобоварим нашему <i style="mso-bidi-font-style: normal;">DropDownList</i>'у. Тепер можно сформировать и сам <i style="mso-bidi-font-style: normal;">DropDownList</i> (листинг 3). Напомню, что им мы заменяем стандартное поле для редактирования.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 3</b> – <i style="mso-bidi-font-style: normal;">DropDownList</i> для типов объектов</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="editor-field"></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="background: yellow; mso-highlight: yellow;">@</span>Html.DropDownListFor(model => model.ObjType, MvcApplication3.Models.<span style="color: #2b91af;">EntitySetToList</span>.ConvertParent(), <span style="color: #a31515;">"---</span></span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">Выбрать</span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"> </span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">тип</span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"> </span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">объекта</span><span lang="EN-US" style="color: #a31515; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;">---"</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;">)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span></span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;"></</span><span style="color: maroon; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">div</span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">></span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Отлично! Запускаем проект – и что видим? Выпадающий список есть, а в нем несколько строчек с типом «1» и несколько – «2». Почему? Потому что в нашей таблице <i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Map</span></i><span lang="EN-US"> </span>несколько записей с этими типами. Что делать? Надо как то сгруппировать это все дело. Идем обратно в модель, которая формирует нам список, и вносим изменения (листинг 4).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 4</b> – Обновление формирования списка для <i style="mso-bidi-font-style: normal;">DropDownList</i></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: blue;">static</span> <span style="color: #2b91af;">List</span><<span style="color: #2b91af;">SelectListItem</span>> ConvertParent()</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">DataManager</span> dm = <span style="color: blue;">new</span> <span style="color: #2b91af;">DataManager</span>();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">List</span><<span style="color: #2b91af;">SelectListItem</span>> items = <span style="color: blue;">new</span> <span style="color: #2b91af;">List</span><<span style="color: #2b91af;">SelectListItem</span>>();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">var</span> parent = dm.GetMapObjets().GroupBy(c => c.ObjType);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">foreach</span> (<span style="color: blue;">var</span> item <span style="color: blue;">in</span> parent)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>items.Add(<span style="color: blue;">new</span> <span style="color: #2b91af;">SelectListItem</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span>Text = item.Key.ToString(),</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>Value = item.Key.ToString()</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>});</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">return</span> items;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">}</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Видно, что мы сгруппировали список объектов карты. Запускаем проект – видим, что в списке остались только два значения. Прекрасно! Теперь займемся подчиненным списком. Изначально он у нас будет пустым, поэтому в представление ниже родительского списка добавляем пустой подчиненный (листинг 5).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 5</b> – Добавление подчиненного списка</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="editor-label"></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="background: yellow; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas; mso-highlight: yellow;">@</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;">Html.Label(<span style="color: #a31515;">"</span></span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">Объект</span><span lang="EN-US" style="color: #a31515; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;">"</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;">)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="editor-field"></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="background: yellow; mso-highlight: yellow;">@</span>Html.DropDownList(<span style="color: #a31515;">"TypeName"</span>, <span style="color: #2b91af;">Enumerable</span>.Empty<<span style="color: #2b91af;">SelectListItem</span>>())</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span></span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;"></</span><span style="color: maroon; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">div</span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">></span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Обучим теперь наш <i style="mso-bidi-font-style: normal;">DataManager</i> получать список видов объектов по его типу (листинг 6).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 6</b> – Формирование списка видов объектов</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: #2b91af;">List</span><<span style="color: blue;">object</span>> GetMapObjetTypeName(<span style="color: blue;">long</span> objType)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;">{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">List</span><<span style="color: blue;">object</span>> list = <span style="color: blue;">new</span> <span style="color: #2b91af;">List</span><<span style="color: blue;">object</span>>();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">foreach</span> (<span style="color: #2b91af;">MapObjectType</span> item <span style="color: blue;">in</span> _db.MapObjectType)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">if</span> (item.ObjType == objType)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">var</span> data = <span style="color: blue;">new</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>Id = item.ObjType,</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span>Name = item.TypeName</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>};</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>list.Add(data);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">return</span> list;<span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">}</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Принцип прост – если тип объекта соответствует заданному, то он добавляется в итоговый список. Далее нам нужен экшен, который бы передавал этот список представлению (листинг 7).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 7</b> – Экшен для формирования подчиненного списка</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>[<span style="color: #2b91af;">HttpGet</span>]</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: #2b91af;">JsonResult</span> TypeNameById(<span style="color: blue;">long</span> objType)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">DataManager</span> db = <span style="color: blue;">new</span> <span style="color: #2b91af;">DataManager</span>();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">return</span> Json(db.GetMapObjetTypeName(objType), <span style="color: #2b91af;">JsonRequestBehavior</span>.AllowGet);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">}</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Тут мы получаем от <i style="mso-bidi-font-style: normal;">DataManager'а</i> список видов объектов и сериализуем его в <b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;">JSON</i></b>. А теперь самое интересное – нам нужно получить этот список из представления и засунуть его в подчиненный список. В дело вступает <b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;">jQuery</i></b> (листинг 8).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 8</b> – Каскадное обновление </div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">function</span><span style="font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;"> CascadeDDL(parentDDL, childDDL, actionName) {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span style="font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;">var</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"> selectedParent = $(parentDDL).val();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">if</span> (selectedParent != <span style="color: blue;">null</span> && selectedParent != <span style="color: maroon;">''</span>) {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>$.getJSON(actionName, { objType: selectedParent }, <span style="color: blue;">function</span> (child) {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">var</span> selectedChild = $(childDDL);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>selectedChild.empty();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>$.each(child, <span style="color: blue;">function</span> (index, child) {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span>selectedChild.append($(<span style="color: maroon;">'<option/>'</span>, {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>value: child.Id,</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>text: child.Name</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">}));</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span style="font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>});</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span style="font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>});</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span style="font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span style="font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">}</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Функция получает на вход имя родительского и дочернего списков и имя экшена, который будет с ними работать. Далее определяется выделенный элемент родительского списка и отправляется экшену, который формирует <b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;">JSON</i></b> для дочернего списка и отдает его представлению. Далее по очереди все элементы этого <b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;">JSON</i></b> добавляются в дочерний список. Все просто! Осталось только задействовать функцию каскадного обновления списков (листинг 9).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 9</b> – Подключение каскадного обновления списков</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><</span><span lang="EN-US" style="color: maroon; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;">script</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"> <span style="color: red;">src</span><span style="color: blue;">="</span><span style="background: yellow; mso-highlight: yellow;">@</span><span style="color: blue;">Url.Content(</span><span style="color: #a31515;">"../../Scripts/DropDownCascade.js"</span><span style="color: blue;">)"></</span><span style="color: maroon;">script</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><</span><span lang="EN-US" style="color: maroon; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;">script</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"> <span style="color: red;">src</span><span style="color: blue;">="</span><span style="background: yellow; mso-highlight: yellow;">@</span><span style="color: blue;">Url.Content(</span><span style="color: #a31515;">"~/Scripts/jquery-1.5.1.min.js"</span><span style="color: blue;">)"></</span><span style="color: maroon;">script</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><</span><span lang="EN-US" style="color: maroon; font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;">script</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"> <span style="color: red;">type</span><span style="color: blue;">="text/javascript"></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>$(<span style="color: maroon;">'#ObjType'</span>).change(<span style="color: blue;">function</span> () {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span>CascadeDDL(<span style="color: maroon;">"#ObjType"</span>, <span style="color: maroon;">"#TypeName"</span>, <span style="color: maroon;">"/Home/TypeNameById"</span>);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; mso-ansi-language: EN-US; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">});</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span style="font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;"><span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;"></</span><span style="color: maroon; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">script</span><span style="color: blue; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: Consolas;">></span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Запускаем проект, тестируем, радуемся.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Удачи!</div></div>dedMazDiehttp://www.blogger.com/profile/18195725128796745204noreply@blogger.com1tag:blogger.com,1999:blog-2402315195124580440.post-72307382887984448802011-08-04T10:50:00.002+06:002011-08-04T10:50:55.952+06:00В Уфе Яндекс запустит в небо дирижабль<div dir="ltr" style="text-align: left;" trbidi="on">4 августа интернет-компания «Яндекс» начинает съемку городских панорам с высоты птичьего полета. Съемка будет производиться с беспилотного дирижабля. <br />
Как отмечают в компании, это крупнейший беспилотный радиоуправляемый дирижабль в России: его длина – 12 метров, объем – 57 кубических метров.<br />
Первым городом, в которой запустят дирижабль станет Уфа.<br />
Фотосъемка будет вестись с высоты 150-200 метров. На аппарате установлены пять специальных фотокамер, на которые попадут главные улицы и площади города, а также сад имени Салавата Юлаева.<br />
Вскоре, все снимки мы сможем увидеть на сервисе «Яндекс.Карты».<br />
<br />
<div style="text-align: right;"><a href="http://proufu.ru/content/view/16930/">Источник </a></div></div>dedMazDiehttp://www.blogger.com/profile/18195725128796745204noreply@blogger.com0tag:blogger.com,1999:blog-2402315195124580440.post-49267400440214793432011-08-03T12:12:00.001+06:002011-08-03T12:13:37.004+06:00MVC. Поиск на карте средствами API Яндекс.Карт<div dir="ltr" style="text-align: left;" trbidi="on"><br />
<div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Итак, у нас есть карта с кучей объектов, все работает, и все вроде бы прекрасно. Но объектов становится все больше, и ориентироваться в них все сложнее. Поэтому юзеру рано или поздно захочется воспользоваться хотя бы простеньким поиском. Вот и попробуем сделать простенький поиск по названию объекта. Для этого нам нужно окошко для ввода поискового слова, кнопка для запуска поиска и контейнер для списка найденных объектов (у нас это будет просто <i style="mso-bidi-font-style: normal;">DropDownList</i>). При выборе в списке найденных объектов какого-либо элемента на карте будет отображаться соответствующий балун. Все это будет сделано на чистом <b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;">jQuery</i></b> с использованием <b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><a href="http://api.yandex.ru/maps/"><span lang="EN-US">API YandexMaps</span></a>.</i></b> </div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Для начала создадим необходимые контролы (листинг 1).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 1</b> – Контролы для поиска</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">table</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">tr</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">td</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="background: none repeat scroll 0% 0% yellow;">@</span>Html.Editor(<span style="color: #a31515;">"findWord"</span>)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"></</span><span style="color: maroon;">td</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">td</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">input</span> <span style="color: red;">type</span><span style="color: blue;">="button"</span> <span style="color: red;">value</span><span style="color: blue;">="Find"</span> <span style="color: red;">id</span><span style="color: blue;">="findButton"</span> <span style="color: blue;">/></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"></</span><span style="color: maroon;">td</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"></</span><span style="color: maroon;">tr</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">tr</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">td</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="background: none repeat scroll 0% 0% yellow;">@</span>Html.DropDownList(<span style="color: #a31515;">"ObjName"</span>, <span style="color: #2b91af;">Enumerable</span>.Empty<<span style="color: #2b91af;">SelectListItem</span>>())</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"></</span><span style="color: maroon;">td</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">td</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"></</span><span style="color: maroon;">td</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"></</span><span style="color: maroon;">tr</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"></</span><span style="color: maroon;">table</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Теперь пишем функцию поиска объектов по введенному слову (листинг 2).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 2</b> – jQuery – функция поиска </div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: darkgreen;">// Функция для поиска объектов среди имеющихся на карте </span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: darkgreen;">// по названию объекта и добавления их в список</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">function</span> getFindList() {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> </span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: darkgreen;">// поисковая стркоа</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">var</span> searchName = document.getElementById(<span style="color: maroon;">'findWord'</span>).value.replace(<span style="color: blue;">new</span> RegExp(<span style="color: maroon;">' '</span>, <span style="color: maroon;">'i'</span>), <span style="color: maroon;">'.+'</span>);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;">// "регулярка" для поиска</span><span style="font-family: Consolas; font-size: 9.5pt;"></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> re = <span style="color: blue;">new</span> RegExp(searchName, <span style="color: maroon;">'i'</span>);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: darkgreen;">// произведем поиск</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> </span><span lang="EN-US" style="color: blue; font-family: Consolas; font-size: 9.5pt;">var</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> result = group[<span style="color: maroon;">"new"</span>].filter(<span style="color: blue;">function</span> (overlay) {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">var</span> i = overlay.name.search(re);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">if</span> (i != -1) {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">return</span> overlay.name;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> }</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> });</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: darkgreen;">// </span></span><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;">ищем</span><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;">список</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">var</span> findChild = $(<span style="color: maroon;">'#ObjName'</span>);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> findChild.empty();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: darkgreen;">// </span></span><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;">заполняем</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> $.each(result, <span style="color: blue;">function</span> (index, resultItem) {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> findChild.append($(<span style="color: maroon;">'<option/>'</span>, {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> value: resultItem.name,</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> text: resultItem.name</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="font-family: Consolas; font-size: 9.5pt;">}));</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> });</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> };</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Остановимся подробнее на этой функции. Сначала мы получаем наше искомое слово, попутно избавляясь от лишним пробелов в нем. Далее составляем регулярное выражение, по которому будет происходить поиск (подробнее ознакомиться с регулярными выражениями можно <a href="http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F">тут</a>, ну и <a href="http://www.google.ru/">Google</a> в помощь). Далее, используя полученную «регулярку», осуществляем поиск методом API Яндекс.Карт. В переменной <span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt; line-height: 150%;">result</span><span lang="EN-US"> </span>у нас будут объекты, названия которых удовлетворяет нашей поисковой строке. Далее уже знакомый код по добавлению найденных значений в выпадающий список. Осталось вызвать эту функцию при клике по кнопке поиска (листинг 3).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 3</b> – Вызов поиска при клике по кнопке</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> $(<span style="color: maroon;">'#findButton'</span>).click(<span style="color: blue;">function</span> () {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> getFindList();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="font-family: Consolas; font-size: 9.5pt;">});</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Мы получили список объектов, которые удовлетворяют поисковой строке (рисунок 1).</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiiDyjA6t60SMmmg-HwZkRj2YQEW-iX3orXVb14HKclpS8hmYwsGOvyJBBExLuzVlIeQPlgQL4UQZz_82RrMAuZpFn8XGoRDXNxcBrDV66beGyswNCfzMoGlqxDsI3eIKJtm08pACC2VM/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiiDyjA6t60SMmmg-HwZkRj2YQEW-iX3orXVb14HKclpS8hmYwsGOvyJBBExLuzVlIeQPlgQL4UQZz_82RrMAuZpFn8XGoRDXNxcBrDV66beGyswNCfzMoGlqxDsI3eIKJtm08pACC2VM/s320/1.JPG" width="320" /></a></div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"><br />
</div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Рисунок 1</b> – Список найденных объектов<span lang="EN-US"></span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Идем дальше. Нам нужно снова осуществить поиск на карте, но теперь уже по найденным названиям объектов. И теперь совпадение имен должно быть стопроцентным, т.е. никаких регулярных выражений. И, кроме того, необходимо показывать соответствующий балун (листинг 4).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 4</b> – Отображение балуна найденного объекта</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: darkgreen;">// Функция для отображения объекта</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: darkgreen;">// из списка найденных</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> </span><span lang="EN-US" style="color: blue; font-family: Consolas; font-size: 9.5pt;">function</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> showObject() {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">var</span> findChild = $(<span style="color: maroon;">'#ObjName'</span>);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">var</span> searchName = findChild.val();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">var</span> result = group[<span style="color: maroon;">"new"</span>].filter(<span style="color: blue;">function</span> (overlay) {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">return</span> overlay.name == searchName; <span style="color: darkgreen;">// </span></span><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;">Точное</span><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;">совпадение</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> });</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">if</span> (result[0] != <span style="color: blue;">null</span>) {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> result[0].openBalloon();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="font-family: Consolas; font-size: 9.5pt;">}</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> };</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Думаю, тут все понятно. Осталось вызвать эту функцию при выборе элемента списка (листинг 5).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 5</b> – Отображение балуна объекта при выборе его в списке</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> $(<span style="color: maroon;">'#ObjName'</span>).change(<span style="color: blue;">function</span> () {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> showObject();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="font-family: Consolas; font-size: 9.5pt;">});</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Собственно, все! Удачи!</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div></div>dedMazDiehttp://www.blogger.com/profile/18195725128796745204noreply@blogger.com4tag:blogger.com,1999:blog-2402315195124580440.post-19204103776896907722011-07-28T15:47:00.000+06:002011-07-28T15:47:06.338+06:00MVC - часть3. CRUD логика (Detail)<div dir="ltr" style="text-align: left;" trbidi="on"><br />
<div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Итак, в <a href="http://dedmazdie.blogspot.com/2011/07/mvc-3-crud.html">прошлой статье </a>мы получили список объектов карты. Возле каждого объекта у нас имеется ссылки, в том числе и «<span lang="EN-US">Details</span>». Вот о ней и поговорим. Сама по себе страница с подробностями об объекте не так интересна, но у нас же карта, так давайте вместе с подробностями отобразим небольшую карту, где бы отображался этот самый объект.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Сперва пишем экшен контроллера (листинг 1), а затем генерируем представление (листинг 2).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг</b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US"> 1</span></b><span lang="EN-US"> – </span>Экшен контроллера</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> [<span style="color: #2b91af;">HttpGet</span>]</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">public</span> <span style="color: #2b91af;">ActionResult</span> MapObject_Details(<span style="color: blue;">long</span> id)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">if</span> (id != 0)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: #2b91af;">DataManager</span> db = <span style="color: blue;">new</span> <span style="color: #2b91af;">DataManager</span>();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">return</span> View(db.GetMapObject(id));</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> }</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">else</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">return</span> View();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> }</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> }</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг</b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US"> 2</span></b><span lang="EN-US"> – </span>Представление <span lang="EN-US">Details</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="color: blue; font-family: Consolas; font-size: 9.5pt;"><</span><span lang="EN-US" style="color: maroon; font-family: Consolas; font-size: 9.5pt;">fieldset</span><span lang="EN-US" style="color: blue; font-family: Consolas; font-size: 9.5pt;">></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">legend</span><span style="color: blue;">></span>Map<span style="color: blue;"></</span><span style="color: maroon;">legend</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="display-label"></span>ObjName<span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="display-field"></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="background: none repeat scroll 0% 0% yellow;">@</span>Html.DisplayFor(model => model.ObjName)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="display-label"></span>ObjAddress<span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="display-field"></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="background: none repeat scroll 0% 0% yellow;">@</span>Html.DisplayFor(model => model.ObjAddress)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="display-label"></span>ObjType<span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="display-field"></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="background: none repeat scroll 0% 0% yellow;">@</span>Html.DisplayFor(model => model.ObjType_id)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="display-label"></span>Description<span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="display-field"></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="background: none repeat scroll 0% 0% yellow;">@</span>Html.DisplayFor(model => model.Description)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="display-label"></span>Contact<span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="display-field"></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="background: none repeat scroll 0% 0% yellow;">@</span>Html.DisplayFor(model => model.Contact)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="display-label"></span>Longitude<span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="display-field"></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="background: none repeat scroll 0% 0% yellow;">@</span>Html.DisplayFor(model => model.Longitude)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="display-label"></span>Latitude<span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="display-field"></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="background: none repeat scroll 0% 0% yellow;">@</span>Html.DisplayFor(model => model.Latitude)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="display-label"></span>ObjType_id<span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="display-field"></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="background: none repeat scroll 0% 0% yellow;">@</span>Html.DisplayFor(model => model.ObjType_id)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="display-label"></span>Author<span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="display-field"></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="background: none repeat scroll 0% 0% yellow;">@</span>Html.DisplayFor(model => model.Author)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="display-label"></span>CreateDate<span style="color: blue;"></</span><span style="color: maroon;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">class</span><span style="color: blue;">="display-field"></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="background: none repeat scroll 0% 0% yellow;">@</span>Html.DisplayFor(model => model.CreateDate)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt;"></</span><span style="color: maroon; font-family: Consolas; font-size: 9.5pt;">div</span><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span style="color: blue; font-family: Consolas; font-size: 9.5pt;"></</span><span style="color: maroon; font-family: Consolas; font-size: 9.5pt;">fieldset</span><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">></span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Дополним эту разметку еще одним полем – скрытым:</div><div align="center" class="MsoNormal" style="mso-layout-grid-align: none; text-align: center; text-autospace: none;"><span lang="EN-US" style="background: none repeat scroll 0% 0% yellow; font-family: Consolas; font-size: 9.5pt;">@</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;">Html.HiddenFor(model => model.MapObj_id)</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">В этом скрытом поле на нашей странице будет присутствовать идентификатор объекта. Зачем он нам? А мы по его значению будем на карту грузить его балун. Рассмотрим, как. Для начала сделаем метод нашего менеджера данных, который по идентификатору будет отдавать данные об объекте (листинг 3).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 3</b> – Получаем данные объекта по идентификатору</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">public</span> <span style="color: #2b91af;">List</span><<span style="color: blue;">object</span>> GetMapObjectById(<span style="color: blue;">long</span> mapObjId)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: #2b91af;">List</span><<span style="color: blue;">object</span>> list = <span style="color: blue;">new</span> <span style="color: #2b91af;">List</span><<span style="color: blue;">object</span>>();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: #2b91af;">Map</span> item = GetMapObject(mapObjId);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">var</span> data = <span style="color: blue;">new</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> Name = item.ObjName,</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> Style = item.MapObjType.Style,</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> Latitude = item.Latitude, <span style="color: green;">//</span></span><span style="color: green; font-family: Consolas; font-size: 9.5pt;">широта</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> Longitude = item.Longitude, <span style="color: green;">//</span></span><span style="color: green; font-family: Consolas; font-size: 9.5pt;">долгота</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> Html = <span style="color: #a31515;">"<table class='info'>"</span> +</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: #a31515;">"<tr><th></span></span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;">Название</span><span lang="EN-US" style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"></th><td>"</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> + item.ObjName + <span style="color: #a31515;">"</td></tr>"</span> +</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: #a31515;">"<tr><th></span></span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;">Адрес</span><span lang="EN-US" style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"></th><td>"</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> + item.ObjAddress + <span style="color: #a31515;">"</td></tr>"</span> +</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: #a31515;">"<tr><th></span></span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;">Описание</span><span lang="EN-US" style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"></th><td>"</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> + item.Description + <span style="color: #a31515;">"</td></tr>"</span> +</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: #a31515;">"<tr><th></span></span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;">Контакты</span><span lang="EN-US" style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"></th><td>"</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> + item.Contact + <span style="color: #a31515;">"</td></tr>"</span> +</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: #a31515;">"<tr><th></span></span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;">Оценка</span><span lang="EN-US" style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"></th><td>"</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> + ((item.MiddleRating != 0) ? item.MiddleRating.ToString() : <span style="color: #a31515;">"</span></span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;">нет</span><span lang="EN-US" style="color: #a31515; font-family: Consolas; font-size: 9.5pt;">"</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;">) + <span style="color: #a31515;">"</td></tr>"</span> +</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: #a31515;">"<tr><th><a href='/Home/Comment/"</span> + item.MapObj_id + <span style="color: #a31515;">"'></span></span><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt;">Отзывы</span><span lang="EN-US" style="color: #a31515; font-family: Consolas; font-size: 9.5pt;"></a></th><td></td></tr>"</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> +</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: #a31515;">"</table>"</span>, <span style="color: green;">//</span></span><span style="color: green; font-family: Consolas; font-size: 9.5pt;">код</span><span style="color: green; font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: green; font-family: Consolas; font-size: 9.5pt;">для</span><span style="color: green; font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: green; font-family: Consolas; font-size: 9.5pt;">балуна</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> };</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> list.Add(data);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">return</span><span style="font-family: Consolas; font-size: 9.5pt;"> list;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> }</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Как видно, тут мы формируем код балуна, который позже загрузим в js-скрипте.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Теперь пишем экшен, который запакует это все дело в JSON (листинг 4).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 4</b> – Экшен, передающий данные в представление</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> [<span style="color: #2b91af;">HttpGet</span>]</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">public</span> <span style="color: #2b91af;">JsonResult</span> ObjectDetails(<span style="color: blue;">long</span> mapObjId)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: #2b91af;">DataManager</span> db = <span style="color: blue;">new</span> <span style="color: #2b91af;">DataManager</span>();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">return</span> Json(db.GetMapObjectById(mapObjId), <span style="color: #2b91af;">JsonRequestBehavior</span>.AllowGet);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="font-family: Consolas; font-size: 9.5pt;">}</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Остался скрипт, который загрузит наш JSON на карту (листинг 5).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 5</b> – Скрипт отображения данных на карте</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="color: blue; font-family: Consolas; font-size: 9.5pt;"><</span><span lang="EN-US" style="color: maroon; font-family: Consolas; font-size: 9.5pt;">script</span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: red;">src</span><span style="color: blue;">="http://api-maps.yandex.ru/1.1/index.xml?key=AAFDuU0BAAAAWmDlWgMAn8sg2dtfRwaCuNPYn0etp5qnk6QAAAAAAAAAAAAwqKOA3GzAs8EObkeouS3eI9xZMA=="</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: red; font-family: Consolas; font-size: 9.5pt;">type</span><span style="color: blue; font-family: Consolas; font-size: 9.5pt;">="text/javascript"></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"></</span><span style="color: maroon;">script</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">script</span> <span style="color: red;">type</span><span style="color: blue;">="text/javascript"</span> <span style="color: red;">src</span><span style="color: blue;">="../../Scripts/jquery-1.5.1.min.js"></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"></</span><span style="color: maroon;">script</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"><</span><span style="color: maroon;">script</span> <span style="color: red;">type</span><span style="color: blue;">="text/javascript"</span> <span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">var</span> group = [];</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">var</span> map;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> $(document).ready(<span style="color: blue;">function</span> () {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;">// Найдем на странице html элемент в котором будет размещаться карта</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> </span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;">map = <span style="color: blue;">new</span> YMaps.Map(YMaps.jQuery(<span style="color: maroon;">"#YMapsID"</span>)[0]);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> map.setCenter(<span style="color: blue;">new</span> YMaps.GeoPoint(55.975669, 54.732613), 10);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: darkgreen;">// </span></span><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;">добавим</span><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;">контролы</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> map.addControl(<span style="color: blue;">new</span> YMaps.ToolBar());</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> map.addControl(<span style="color: blue;">new</span> YMaps.Zoom());</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> map.addControl(<span style="color: blue;">new</span> YMaps.TypeControl());</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> map.enableScrollZoom();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">var</span> searchControl = <span style="color: blue;">new</span> YMaps.SearchControl({</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="font-family: Consolas; font-size: 9.5pt;">resultsPerPage: 2, <span style="color: darkgreen;">// Количество объектов на странице</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> useMapBounds: 1 <span style="color: darkgreen;">// Объекты, найденные в видимой области карты</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: darkgreen;">// будут показаны в начале списка</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> });</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> </span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;">map.addControl(searchControl);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> getObject(document.getElementById(<span style="color: maroon;">'MapObj_id'</span>).value);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> });</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: darkgreen;">// </span></span><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;">объект</span><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;">по</span><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;">идентификатору</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">function</span> getObject(mapObjId) {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> $.getJSON(<span style="color: maroon;">"/Home/ObjectDetails"</span>, { mapObjId: mapObjId }, <span style="color: blue;">function</span> (mapObj) {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">var</span> s;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> group[<span style="color: maroon;">"new"</span>] = <span style="color: blue;">new</span> YMaps.GeoObjectCollection(<span style="color: maroon;">"default#"</span>);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="font-family: Consolas; font-size: 9.5pt;">$.each(mapObj, <span style="color: blue;">function</span> (i) {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: darkgreen;">// Создание стиля для значка метки</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> </span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;">s = <span style="color: blue;">new</span> YMaps.Style();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> s.iconStyle = <span style="color: blue;">new</span> YMaps.IconStyle();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> s.iconStyle.href = <span style="color: blue;">this</span>.Style;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> s.iconStyle.size = <span style="color: blue;">new</span> YMaps.Point(18, 18);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> s.iconStyle.offset = <span style="color: blue;">new</span> YMaps.Point(-9, -9);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> s.balloonContentStyle = <span style="color: blue;">new</span> YMaps.BalloonContentStyle(</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">new</span> YMaps.Template(<span style="color: maroon;">"<div>$[description]</div>"</span>)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> );</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">var</span> point = <span style="color: blue;">new</span> YMaps.GeoPoint(<span style="color: blue;">this</span>.Longitude, <span style="color: blue;">this</span>.Latitude);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">var</span> placemark = <span style="color: blue;">new</span> YMaps.Placemark(point, { hasHint: 1, style: s });</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> placemark.name = <span style="color: blue;">this</span>.Name;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: darkgreen;">//</span></span><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;">тут</span><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;"> </span><span style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;">засовываем</span><span lang="EN-US" style="color: darkgreen; font-family: Consolas; font-size: 9.5pt;"> html</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> placemark.description = <span style="color: blue;">this</span>.Html + <span style="color: maroon;">"<br />"</span>;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> group[<span style="color: maroon;">"new"</span>].add(placemark);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> });</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> map.addOverlay(group[<span style="color: maroon;">"new"</span>]);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="font-family: Consolas; font-size: 9.5pt;">});</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> };</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;"></</span><span style="color: maroon;">script</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">В общем то, схема уже нам <a href="http://dedmazdie.blogspot.com/2011/06/mvc-1.html">знакома</a>, комментировать нечего.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Результат на рисунке 1.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh11hokq3dYBmGk8Y_HDnAwQA4QoCBGqrwtVFQlnk7zJHp0eBf7I4cXbiqipVBVLHD5J7Bs6-f4ffWrHaeLi6bkfmNP3G7ySTp6OgxvDpDeyuUpsk_9OeM1yXI9N5mKtVHF7I_tVYnccBo/s1600/1.JPG" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh11hokq3dYBmGk8Y_HDnAwQA4QoCBGqrwtVFQlnk7zJHp0eBf7I4cXbiqipVBVLHD5J7Bs6-f4ffWrHaeLi6bkfmNP3G7ySTp6OgxvDpDeyuUpsk_9OeM1yXI9N5mKtVHF7I_tVYnccBo/s320/1.JPG" width="320" /></a></div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"><br />
</div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Рисунок 1</b> – Подробности об объекте карты</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div></div>dedMazDiehttp://www.blogger.com/profile/18195725128796745204noreply@blogger.com6tag:blogger.com,1999:blog-2402315195124580440.post-9872451037916286082011-07-21T16:07:00.001+06:002011-07-21T16:07:36.583+06:00MVC - часть3. CRUD логика (Edit)<div dir="ltr" style="text-align: left;" trbidi="on"><br />
<div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Давайте теперь попробуем сгенерировать страницу для редактирования объекта нашей карты.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Если изучить ссылки на редактирование в списке объектов, то можно обнаружить, что они все уникальны и содержат в себе идентификатор объекта карты. Вот этот идентификатор и будет «ловить» экшен, отвечающий за редактирование. Давайте приступим. Для начала нам нужен метод нашего <i style="mso-bidi-font-style: normal;">MapDataManager</i>, который бы отдавал нам объект карты по его идентификатору (листинг 1).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 1</b> – Получение объекта по его идентификатору</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">public</span> <span style="color: #2b91af;">Map</span> GetMapObjet(<span style="color: blue;">long</span> mapObjId)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">return</span> _db.Map.SingleOrDefault(it => it.MapObj_id == mapObjId);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="font-family: Consolas; font-size: 9.5pt;">}</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Тут, думаю, все понятно. Едем дальше – пишем экшен для получения формы для редактирования объекта (листинг 2).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 2</b> – Получение формы для редактирования объекта</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> [<span style="color: #2b91af;">HttpGet</span>]</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">public</span> <span style="color: #2b91af;">ActionResult</span> MapObject_Edit(<span style="color: blue;">long</span> id)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: #2b91af;">DataManager</span> dm = <span style="color: blue;">new</span> <span style="color: #2b91af;">DataManager</span>();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">return</span> View(dm.GetMapObjet(id));</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="font-family: Consolas; font-size: 9.5pt;">}</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Тут мы передаем в представление объект карты, полученный по идентификатору. Напомню, что этот идентификатор «пришел» в экшен из ссылки на странице со списком объектов. Теперь нам надо зафиксировать наши изменения в БД при отправке формы. Для этого сначала «научим» <i style="mso-bidi-font-style: normal;">MapDataManager</i> сохранять объект в БД (листинг 3).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 3</b> – Сохранение объекта в БД</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">public</span> <span style="color: blue;">void</span> SaveMapObject(<span style="color: #2b91af;">Map</span> mapObj)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: #2b91af;">Map</span> old = GetMapObjet(mapObj.MapObj_id);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> old.ObjName = mapObj.ObjName;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> old.ObjAddress = mapObj.ObjAddress;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> old.ObjType = mapObj.ObjType;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> old.Description = mapObj.Description;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> old.Contact = mapObj.Contact;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> old.Longitude = mapObj.Longitude;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> old.Latitude = mapObj.Latitude;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> _db.SaveChanges();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="font-family: Consolas; font-size: 9.5pt;">}</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"> Тут мы передаем в процедуру новый объект. Для фиксации его отредактированных свойств мы сначала ищем старый (нередактированный) объект – и по очереди обновляем все его свойства. Далее – сохраняем. Теперь напишем экшен пост-формы для этого дела (листинг 4).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 4</b> – Отправка формы с измененным объектом</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> [<span style="color: #2b91af;">HttpPost</span>]</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">public</span> <span style="color: #2b91af;">ActionResult</span> MapObject_Edit(<span style="color: #2b91af;">Map</span> mapObj)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">if</span> (ModelState.IsValid)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: #2b91af;">DataManager</span> dm = <span style="color: blue;">new</span> <span style="color: #2b91af;">DataManager</span>();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> dm.SaveMapObject(mapObj);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">return</span> RedirectToAction(<span style="color: #a31515;">"Index"</span>);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="font-family: Consolas; font-size: 9.5pt;">}</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">else</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">return</span> View();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> }</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: Consolas; font-size: 9.5pt;"> }</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Как говорится, без комментариев. </div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Если вы обратили внимание, мы наш экшен назвали <i style="mso-bidi-font-style: normal;"> </i><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 9.5pt; line-height: 150%;">MapObject</span></i><i style="mso-bidi-font-style: normal;"><span style="font-size: 9.5pt; line-height: 150%;">_</span></i><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 9.5pt; line-height: 150%;">Edit</span></i>, в то время как в представлении со списком объектов студия обозвала этот экшен просто <i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 9.5pt; line-height: 150%;">Edit</span></i>, поэтому переименуйте эту ссылку вручную – и пользуйтесь.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Таким нехитрым способом буквально за пару минут мы создали страницу для редактирования объекта карты.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div></div>dedMazDiehttp://www.blogger.com/profile/18195725128796745204noreply@blogger.com3tag:blogger.com,1999:blog-2402315195124580440.post-13511247857085548382011-07-08T11:14:00.003+06:002011-07-21T16:05:06.602+06:00MVC - часть3. CRUD логика (List)<div dir="ltr" style="text-align: left;" trbidi="on"><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">В <a href="http://dedmazdie.blogspot.com/2011/06/mvc-2-data-access-level.html">прошлой статье</a> мы остановились на том, что создали <b style="mso-bidi-font-weight: normal;">Entity Framework </b>модель по нашей БД. Давайте немного усложним нашу БД, чтоб было интереснее и немного сложнее. Допустим, будем на карте отображать объекты, полезные автомобилисту – автосервисы и автозаправочные станции (АЗС). Создадим таблицы для хранения наших данных (листинг 1).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 1</b> – Таблицы с данными об объектах карты</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">CREATE</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> <span style="color: blue;">TABLE</span> [dbo]<span style="color: grey;">.</span>[Map] <span style="color: grey;">(</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> [MapObj_id] <span style="color: blue;">bigint</span> <span style="color: blue;">IDENTITY</span><span style="color: grey;">(</span>1<span style="color: grey;">,</span> 1<span style="color: grey;">)</span> <span style="color: grey;">NOT</span> <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> [ObjName] <span style="color: blue;">nvarchar</span><span style="color: grey;">(</span>512<span style="color: grey;">)</span> <span style="color: blue;">COLLATE</span> Cyrillic_General_CI_AS <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> [ObjAddress] <span style="color: blue;">nvarchar</span><span style="color: grey;">(</span>512<span style="color: grey;">)</span> <span style="color: blue;">COLLATE</span> Cyrillic_General_CI_AS <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> [ObjType] <span style="color: blue;">int</span> <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> [Description] <span style="color: blue;">nvarchar</span><span style="color: grey;">(</span><span style="color: magenta;">max</span><span style="color: grey;">)</span> <span style="color: blue;">COLLATE</span> Cyrillic_General_CI_AS <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> [Contact] <span style="color: blue;">nvarchar</span><span style="color: grey;">(</span><span style="color: magenta;">max</span><span style="color: grey;">)</span> <span style="color: blue;">COLLATE</span> Cyrillic_General_CI_AS <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> [Longitude] <span style="color: blue;">nvarchar</span><span style="color: grey;">(</span>32<span style="color: grey;">)</span> <span style="color: blue;">COLLATE</span> Cyrillic_General_CI_AS <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> [Latitude] <span style="color: blue;">nvarchar</span><span style="color: grey;">(</span>32<span style="color: grey;">)</span> <span style="color: blue;">COLLATE</span> Cyrillic_General_CI_AS <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> <span style="color: blue;">CONSTRAINT</span> [CLIDX_Map_id] <span style="color: blue;">PRIMARY</span> <span style="color: blue;">KEY</span> <span style="color: blue;">CLUSTERED</span> <span style="color: grey;">(</span>[MapObj_id]<span style="color: grey;">)</span></span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><span style="color: grey; font-family: "Courier New"; font-size: 9pt; line-height: 150%;">)</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">CREATE</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> <span style="color: blue;">TABLE</span> [dbo]<span style="color: grey;">.</span>[Comments] <span style="color: grey;">(</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> [Comm_id] <span style="color: blue;">bigint</span> <span style="color: blue;">IDENTITY</span><span style="color: grey;">(</span>1<span style="color: grey;">,</span> 1<span style="color: grey;">)</span> <span style="color: grey;">NOT</span> <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> [MapObj_id] <span style="color: blue;">bigint</span> <span style="color: grey;">NOT</span> <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> [CommentText] <span style="color: blue;">nvarchar</span><span style="color: grey;">(</span>4000<span style="color: grey;">)</span> <span style="color: blue;">COLLATE</span> Cyrillic_General_CI_AS </span><span style="font-family: "Courier New"; font-size: 9pt;"></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">CONSTRAINT</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> [NNULL_Comments_Comment] <span style="color: blue;">DEFAULT</span> <span style="color: red;">''</span> <span style="color: grey;">NOT</span> <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> [Rating] <span style="color: blue;">int</span> <span style="color: grey;">NOT</span> <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> [Author] <span style="color: blue;">nvarchar</span><span style="color: grey;">(</span>32<span style="color: grey;">)</span> <span style="color: blue;">COLLATE</span> Cyrillic_General_CI_AS </span><span style="font-family: "Courier New"; font-size: 9pt;"></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">CONSTRAINT</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> [NNULL_Comment_Author] <span style="color: blue;">DEFAULT</span> <span style="color: red;">'</span></span><span style="color: red; font-family: "Courier New"; font-size: 9pt;">неизвестный</span><span lang="EN-US" style="color: red; font-family: "Courier New"; font-size: 9pt;">'</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> <span style="color: grey;">NOT</span> <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> <span style="color: blue;">CONSTRAINT</span> [CLIDX_Comment_id] <span style="color: blue;">PRIMARY</span> <span style="color: blue;">KEY</span> <span style="color: blue;">CLUSTERED</span> <span style="color: grey;">(</span>[Comm_id]<span style="color: grey;">),</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> <span style="color: blue;">CONSTRAINT</span> [CK_Comment_Rating] <span style="color: blue;">CHECK</span> <span style="color: grey;">([Rating]<(11) AND [Rating]>(0)),</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> <span style="color: blue;">CONSTRAINT</span> [FK_Comments_MapObjId] <span style="color: blue;">FOREIGN</span> <span style="color: blue;">KEY</span> <span style="color: grey;">(</span>[MapObj_id]<span style="color: grey;">)</span> </span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> <span style="color: blue;">REFERENCES</span> [dbo]<span style="color: grey;">.</span>[Map] <span style="color: grey;">(</span>[MapObj_id]<span style="color: grey;">)</span> </span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> <span style="color: blue;">ON</span> <span style="color: blue;">UPDATE</span> <span style="color: blue;">CASCADE</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> <span style="color: blue;">ON</span> <span style="color: blue;">DELETE</span> <span style="color: blue;">CASCADE</span></span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><span style="color: grey; font-family: "Courier New"; font-size: 9pt; line-height: 150%;">)</span><span style="font-size: 9pt; line-height: 150%;"></span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Разберемся. Таблица <i style="mso-bidi-font-style: normal;">Map</i> – это данные об объектах карты: название, адрес, контакты, координаты, тип объекта (1 – автосервис, 2 - азс). Таблица <i style="mso-bidi-font-style: normal;">Comments</i> – это комментарии, которые оставляют пользователи о каких-либо объектах, содержит сам текст комментария, автора, оценку пользователя. Таблица <i style="mso-bidi-font-style: normal;">Map</i> связана с <i style="mso-bidi-font-style: normal;">Comments</i> внешним ключом отношением 1 ко многим (рисунок 1), т.е. у одного объекта может быть куча комментариев. Ну, это и понятно.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3kY0ACoYk3noJaSrj5v2L6bxZPi7v9e9l5oaSoq3Hn-6ErxemA1WoBthOhVMKuzQ19qXPm1T7Xrtj7gmrpbiDzCGgh_1hbr7sr5nA82htdEdJYdRSAgvdl0CNcvyQm_SEzMB_Fhpn-LM/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="159" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3kY0ACoYk3noJaSrj5v2L6bxZPi7v9e9l5oaSoq3Hn-6ErxemA1WoBthOhVMKuzQ19qXPm1T7Xrtj7gmrpbiDzCGgh_1hbr7sr5nA82htdEdJYdRSAgvdl0CNcvyQm_SEzMB_Fhpn-LM/s320/1.JPG" width="320" /></a></div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Рисунок 1</b> – Сущности из нашей БД </div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
Кроме того, есть ограничение на оценку (может быть только от 0 до 10) и другие мелочи – разберетесь.</div><div class="MsoNormal" style="line-height: 150%; mso-layout-grid-align: none; text-align: justify; text-autospace: none; text-indent: 26.95pt;">Идем в раздел <i style="mso-bidi-font-style: normal;"><span lang="EN-US">Models</span></i><span lang="EN-US"> </span>нашего проекта и удаляем нашу модель <i style="mso-bidi-font-style: normal;">MapData</i><i style="mso-bidi-font-style: normal;"><span lang="EN-US">Model</span></i>. Боятся нечего, мы же помним, что архитектура MVC сильна разделением ответственности и все такое – вот мы сейчас на место удаленной модели создадим новую, остальной проект даже не заметит. Но перед этим еще один момент – в <a href="http://dedmazdie.blogspot.com/2011/06/mvc-2-data-access-level.html">прошлой статье</a> мы сгенерировали класс для работы с нашими данными, который назвался <i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="color: #2b91af; font-family: Consolas; font-size: 9.5pt; line-height: 150%;">ProjectEntities</span></i>. Чтоб все легло гладко, идем в файл <i style="mso-bidi-font-style: normal;"><span lang="EN-US">Web</span>.</i><i style="mso-bidi-font-style: normal;"><span lang="EN-US">config</span></i>, ищем там секцию <i style="mso-bidi-font-style: normal;"><span style="color: #a31515; font-family: Consolas; font-size: 9.5pt; line-height: 150%;">connectionStrings</span></i>, а в ней - наш <i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="color: #2b91af; font-family: Consolas; font-size: 9.5pt; line-height: 150%;">ProjectEntities</span></i>. Удаляем эту строку и со спокойной душой повторяем все шаги из прошлой статьи для нашей новой БД.</div><div class="MsoNormal" style="line-height: 150%; mso-layout-grid-align: none; text-align: justify; text-autospace: none; text-indent: 26.95pt;">Осталось поправить в методе <span style="font-family: Consolas; font-size: 9.5pt; line-height: 150%;">GetListObjectMap()</span> нашего <i style="mso-bidi-font-style: normal;">DataManager</i>'а названия полей нашей обновленной таблицы. </div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Теперь все готово для дальнейших манипуляций.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Итак, что такое <b style="mso-bidi-font-weight: normal;">CRUD</b>? Само слово - аббревиатура от слов <span lang="EN-US">Create</span>, <span lang="EN-US">Read</span>, <span lang="EN-US">Update</span>, <span lang="EN-US">Delete</span>. Т.е. это базовые операции управления данными. Применительно к нашему проекту программирование CRUD – логики – это создание (генерация) представлений, которые бы обеспечивали бы эти самые операции. Немного непонятно, но мы разберемся.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Давайте для начала сделаем самое простое – отобразим наши объекты карты в виде некой таблицы - списка, т.е. мы выполним операцию Read. </div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Для начала, научим наш <i style="mso-bidi-font-style: normal;"><span lang="EN-US">DataManager</span></i><span lang="EN-US"> </span>формировать список объектов карты. Для этого создадим метод как в листинге 2.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 2</b> – Получение списка объектов карты</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">public</span> <span style="color: #2b91af;">IQueryable</span><<span style="color: #2b91af;">Map</span>> GetMapObjets()</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span style="font-family: Consolas; font-size: 9.5pt;"> {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">return</span> _db.Map;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span style="font-family: Consolas; font-size: 9.5pt;"> }</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">В общем, все понятно – получаем список объектов.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Идем теперь в наш контроллер и добавляем экшен как в листинге 3.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 3</b> – Экшен для отображения списка объектов карты</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span style="font-family: Consolas; font-size: 9.5pt;"> </span><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;">[<span style="color: #2b91af;">HttpGet</span>]</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">public</span> <span style="color: #2b91af;">ActionResult</span> MapObject_List()</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="font-family: Consolas; font-size: 9.5pt;">{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: #2b91af;">DataManager</span> db = <span style="color: blue;">new</span> <span style="color: #2b91af;">DataManager</span>();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> <span style="color: blue;">return</span> View(db.GetMapObjets());</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: Consolas; font-size: 9.5pt;"> </span><span style="font-family: Consolas; font-size: 9.5pt;">}</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Тут мы создаем список объектов и отдаем их странице, реализуем экшен только с атрибутом <span style="font-family: Consolas; font-size: 9.5pt; line-height: 150%;">[</span><span lang="EN-US" style="color: #2b91af; font-family: Consolas; font-size: 9.5pt; line-height: 150%;">HttpGet</span><span style="font-family: Consolas; font-size: 9.5pt; line-height: 150%;">]</span>, т.е. только для запроса содержимого страницы (для отправки пользовательских данных используется атрибут <span style="font-family: Consolas; font-size: 9.5pt; line-height: 150%;">[</span><span lang="EN-US" style="color: #2b91af; font-family: Consolas; font-size: 9.5pt; line-height: 150%;">HttpPost</span><span style="font-family: Consolas; font-size: 9.5pt; line-height: 150%;">]</span>). После этого щелкаем правой кнопкой на нашем новом экшене и выбираем в появившемся меню <i style="mso-bidi-font-style: normal;"><span lang="EN-US">Add View</span></i><span lang="EN-US">, появится диалог</span> как на рисунке 2.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMQPyNgSyJyK5MYtpKWq2eWrZfxyIj7LdFoVPugZuHcMAMk__aNhDuTrc7wDycYZxaDwuVShBfQLGi7521bcaDOkC7FQruRDbZAzTNInC-B8thmbJK6J8ozeAU26094dt1l6DkgHcQPqo/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMQPyNgSyJyK5MYtpKWq2eWrZfxyIj7LdFoVPugZuHcMAMk__aNhDuTrc7wDycYZxaDwuVShBfQLGi7521bcaDOkC7FQruRDbZAzTNInC-B8thmbJK6J8ozeAU26094dt1l6DkgHcQPqo/s320/1.JPG" width="320" /></a></div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"></div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"></div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"></div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Рисунок 2</b> – Диалог создания представления</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
В этом диалоге выбираем опцию Create a strongly-typed view (создать типизированное представление), это позволит нашему представлению работать с какой-либо из наших моделей. Далее в списке классов моделей выберем <i style="mso-bidi-font-style: normal;">Map (MvcApplication3.Models),</i> т.е. наше представление будет работать с моделью объекта карты. И, самое для нас интереное, выбираем в списке <i style="mso-bidi-font-style: normal;"><span lang="EN-US">Scaffold</span><span lang="EN-US"> </span></i><i style="mso-bidi-font-style: normal;"><span lang="EN-US">template</span></i> шаблон <i style="mso-bidi-font-style: normal;">List</i>, т.е. просто список объектов. Не забудем указать мастер пейдж. Результат на рисунке 3.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNvzlmXyAY5A5HUvoKwST7I2Fq_gn8a0QS3fkPuquuSmsh3YB9L1S10ACRPyVWTvifLl0ES9RjyjEyQFU3G-Rnb_6WiK7VLHpKxTdETFMO00hXnPfnh_X9b5S6LGZms9TEkMTJIC1W8c8/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNvzlmXyAY5A5HUvoKwST7I2Fq_gn8a0QS3fkPuquuSmsh3YB9L1S10ACRPyVWTvifLl0ES9RjyjEyQFU3G-Rnb_6WiK7VLHpKxTdETFMO00hXnPfnh_X9b5S6LGZms9TEkMTJIC1W8c8/s320/1.JPG" width="320" /></a></div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"></div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Рисунок 3</b> – Настройки представления списка объектов</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Представление создали. Содержимое пока изучать не будем. Нам надо создать ссылку на это представление, поэтому идем в файл <i style="mso-bidi-font-style: normal;">_Layout.cshtml</i> и создаем там ссылку. Запускаем. Видим прекрасное (рисунок 4).</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2hZM5DAnWf3crSALdzTyHjN1m826DYe6Xw-tJy9hAt1V71RuG2U463zXytz1kgW8VcqjcJCWWcVkoxuxi480faBGW-PKEWVTCbgJX1UALdckimgbFmDDTDVoOx1IOUG-aS8FGH4HB-lQ/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="166" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2hZM5DAnWf3crSALdzTyHjN1m826DYe6Xw-tJy9hAt1V71RuG2U463zXytz1kgW8VcqjcJCWWcVkoxuxi480faBGW-PKEWVTCbgJX1UALdckimgbFmDDTDVoOx1IOUG-aS8FGH4HB-lQ/s320/1.JPG" width="320" /></a></div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"></div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Рисунок 4</b> – Список наших объектов</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Отлично!<br />
Если попробовать пройтись по ссылкам Edit, Details, Delete, то выскочит ошибка. Почему? Правильно - потому, что у нас не реализованы соответствующие экшены и представления. Попробуем сделать это в следующих статьях.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Удачи!</div></div>dedMazDiehttp://www.blogger.com/profile/18195725128796745204noreply@blogger.com3tag:blogger.com,1999:blog-2402315195124580440.post-55618708137961482802011-06-30T21:39:00.002+06:002011-06-30T21:41:20.474+06:00MVC. Меню с закладками<div dir="ltr" style="text-align: left;" trbidi="on"><br />
<div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Захотелось мне меню с закладками – как в стандартной заготовке MVC3 <span lang="EN-US" style="mso-ansi-language: EN-US;">Web</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">Application</span> (<span lang="EN-US" style="mso-ansi-language: EN-US;">Home</span> - <span lang="EN-US" style="mso-ansi-language: EN-US;">About</span>), но чтоб активная вкладка выделять каким то образом – для простоты цветом. В обычном приложении Web Forms это можно сделать довольно несложно на серверной стороне. В приложении MVC3 для меня это оказалось непростой задачей. Поэтому буду ее решать.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Итак, у нас есть список, который и представляет собой меню:</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: maroon;">ul</span> <span style="color: red;">id</span><span style="color: blue;">="menu"></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: maroon;">li</span><span style="color: blue;">></span><span style="background: yellow; mso-highlight: yellow;">@</span>Html.ActionLink(<span style="color: #a31515;">"Home"</span>, <span style="color: #a31515;">"Index"</span>, <span style="color: #a31515;">"Home"</span>)<span style="color: blue;"></</span><span style="color: maroon;">li</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: maroon;">li</span><span style="color: blue;">></span><span style="background: yellow; mso-highlight: yellow;">@</span>Html.ActionLink(<span style="color: #a31515;">"About"</span>, <span style="color: #a31515;">"About"</span>, <span style="color: #a31515;">"Home"</span>)<span style="color: blue;"></</span><span style="color: maroon;">li</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="color: blue; font-family: "Consolas"; font-size: 9.5pt;"></</span><span style="color: maroon; font-family: "Consolas"; font-size: 9.5pt;">ul</span><span style="color: blue; font-family: "Consolas"; font-size: 9.5pt;">></span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">В CSS-файле есть раздел “<span lang="EN-US" style="mso-ansi-language: EN-US;">TAB</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">MENU</span>”, в котором описывается стиль нашего меню, в том числе есть такое описание:</div><div class="MsoNormal" style="margin-left: 81.0pt; mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="color: maroon; font-family: "Consolas"; font-size: 9.5pt;">ul#menu</span><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"> <span style="color: maroon;">li.selected</span> <span style="color: maroon;">a</span> {</span></div><div class="MsoNormal" style="margin-left: 81.0pt; mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="color: red; font-family: "Consolas"; font-size: 9.5pt;">background-color</span><span style="font-family: "Consolas"; font-size: 9.5pt;">: <span style="color: blue;">#fff</span>;</span></div><div class="MsoNormal" style="margin-left: 81.0pt; mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: red;">color</span>: <span style="color: blue;">#000</span>;</span></div><div class="MsoNormal" style="margin-left: 81.0pt; mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;">}</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Понятно, что описывается стиль активного элемента списка. Теперь надо динамически в зависимости от активной страницы устанавливать стиль <i style="mso-bidi-font-style: normal;">selected</i> соответствующему элементу списка. Создадим несложную модель нашего меню (листинг 1).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 1</b> – Модель меню</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">TabMenu</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;">{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">private</span> TabMenu(<span style="color: blue;">string</span> text, <span style="color: blue;">string</span> action, <span style="color: blue;">string</span> controller)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>Text = text;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>Action = action;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>Controller = controller;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: blue;">static</span> <span style="color: #2b91af;">TabMenu</span> Create(<span style="color: blue;">string</span> text, <span style="color: blue;">string</span> action, <span style="color: blue;">string</span> controller)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">return</span> <span style="color: blue;">new</span> <span style="color: #2b91af;">TabMenu</span>(text, action, controller);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: blue;">string</span> Text { <span style="color: blue;">get</span>; <span style="color: blue;">private</span> <span style="color: blue;">set</span>; }</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: blue;">string</span> Action { <span style="color: blue;">get</span>; <span style="color: blue;">private</span> <span style="color: blue;">set</span>; }</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: blue;">string</span> Controller { <span style="color: blue;">get</span>; <span style="color: blue;">private</span> <span style="color: blue;">set</span>; }</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: "Consolas"; font-size: 9.5pt;">}</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Как видно, закладка имеет свойства: текст, т.е. что будет написано не закладке, ссылка и контроллер.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Теперь создадим элемент управления HTML для представления (листинг 2).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг</b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;"> 2</span></b><span lang="EN-US" style="mso-ansi-language: EN-US;"> – </span>Компонент<span style="mso-ansi-language: EN-US;"> </span>для<span style="mso-ansi-language: EN-US;"> </span>меню</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: blue;">static</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">MenuHtmlHelper</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: blue; font-family: "Consolas"; font-size: 9pt;">public</span><span lang="EN-US" style="font-family: "Consolas"; font-size: 9pt;"> <span style="color: blue;">static</span> <span style="color: #2b91af;">HtmlString</span> TabbedMenu(<span style="color: blue;">this</span> <span style="color: #2b91af;">HtmlHelper</span> helper, <span style="color: #2b91af;">IEnumerable</span><<span style="color: #2b91af;">TabMenu</span>> tabs)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">RouteData</span> route = helper.ViewContext.RequestContext.RouteData;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">string</span> controller = route.GetRequiredString(<span style="color: #a31515;">"controller"</span>);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">string</span> action = route.GetRequiredString(<span style="color: #a31515;">"action"</span>);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">string</span> menu = <span style="color: #a31515;">"<ul id=\"menu\">"</span>;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">foreach</span> (<span style="color: blue;">var</span> tab <span style="color: blue;">in</span> tabs)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">if</span> (controller == tab.Controller && action == tab.Action)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="font-family: "Consolas"; font-size: 9pt;">menu += <span style="color: #a31515;">"<li class='selected'>"</span> + helper.ActionLink(tab.Text, tab.Action,</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>tab.Controller) + <span style="color: #a31515;">"</li>"</span>;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">else</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>menu += <span style="color: #a31515;">"<li>"</span> + helper.ActionLink(tab.Text,</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>tab.Action, tab.Controller) + <span style="color: #a31515;">"</li>"</span>;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>menu += <span style="color: #a31515;">"</ul>"</span>;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">return</span> <span style="color: #2b91af;">MvcHtmlString</span>.Create(menu);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: "Consolas"; font-size: 9.5pt;">}</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Как видно, компонент получает список закладок меню. У той закладки, у которой контроллер и ссылка совпадают с контроллером и ссылкой текущей страницы устанавливается стиль <i style="mso-bidi-font-style: normal;">selected</i> для элемента списка. Не забудьте подключить пространства:</div><div class="MsoNormal" style="margin-left: 63.0pt; mso-layout-grid-align: none; text-autospace: none;"><span style="color: blue; font-family: "Consolas"; font-size: 9.5pt;">using</span><span style="font-family: "Consolas"; font-size: 9.5pt;"> System.Web.Mvc;</span></div><div class="MsoNormal" style="margin-left: 63.0pt; mso-layout-grid-align: none; text-autospace: none;"><span style="color: blue; font-family: "Consolas"; font-size: 9.5pt;">using</span><span style="font-family: "Consolas"; font-size: 9.5pt;"> System.Web.Mvc.Html;</span></div><div class="MsoNormal" style="margin-left: 63.0pt; mso-layout-grid-align: none; text-autospace: none;"><span style="color: blue; font-family: "Consolas"; font-size: 9.5pt;">using</span><span style="font-family: "Consolas"; font-size: 9.5pt;"> System.Web.Routing;</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Теперь в файле <i style="mso-bidi-font-style: normal;">_Layout.cshtml</i> заменяем старое меню на новое (листинг 3).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 3</b> – Код меню в представлении</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="background: yellow; mso-highlight: yellow;">@</span>Html.TabbedMenu(<span style="color: blue;">new</span> <span style="color: #2b91af;">List</span><<span style="color: #2b91af;">TabMenu</span>> {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: #2b91af; font-family: "Consolas"; font-size: 9.5pt;">TabMenu</span><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;">.Create(<span style="color: #a31515;">"</span></span><span style="color: #a31515; font-family: "Consolas"; font-size: 9.5pt;">Главная</span><span lang="EN-US" style="color: #a31515; font-family: "Consolas"; font-size: 9.5pt;">"</span><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;">, <span style="color: #a31515;">"Index"</span>, <span style="color: #a31515;">"Home"</span>),</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">TabMenu</span>.Create(<span style="color: #a31515;">"</span></span><span style="color: #a31515; font-family: "Consolas"; font-size: 9.5pt;">О</span><span style="color: #a31515; font-family: "Consolas"; font-size: 9.5pt;"> </span><span style="color: #a31515; font-family: "Consolas"; font-size: 9.5pt;">проекте</span><span lang="EN-US" style="color: #a31515; font-family: "Consolas"; font-size: 9.5pt;">"</span><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;">, <span style="color: #a31515;">"About"</span>, <span style="color: #a31515;">"Home"</span>)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: "Consolas"; font-size: 9.5pt;">})</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Чтоб представление «увидело» наш компонент надо подключить:</div><div class="MsoNormal" style="margin-left: 63.0pt; mso-layout-grid-align: none; text-autospace: none;"><span style="background-attachment: scroll; background-clip: border-box; background-color: yellow; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; font-family: "Consolas"; font-size: 9.5pt;">@</span><span style="color: blue; font-family: "Consolas"; font-size: 9.5pt;">using</span><span style="font-family: "Consolas"; font-size: 9.5pt;"> MvcApplication3.Models;</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Практически, все. Результат на рисунке 1.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrcmIDBIwJW9K3zVHyYCte4kcbHpf7plGtPgp5Lg8QHrbO2VWzpzuHlJ2o6prUqjxYSmiYL-f1xma4_TFy_GMj0rS-xtxLdu0eS2bxsKDCKvn0A0oszzIcF8VaBwazojkskN_f1wM_rmU/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrcmIDBIwJW9K3zVHyYCte4kcbHpf7plGtPgp5Lg8QHrbO2VWzpzuHlJ2o6prUqjxYSmiYL-f1xma4_TFy_GMj0rS-xtxLdu0eS2bxsKDCKvn0A0oszzIcF8VaBwazojkskN_f1wM_rmU/s320/1.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEMj4aMExCSIXGDC3CFcf_sYjFC0TD82g1JeU4IFCfoG145ay3B7_I7DNIhGJVdNqRx0wCxGZK9O_NsbemCUETAoBdPWoHzwWHRlJlyf5eJI0F36FnxgLZFdWl6kT8ur_3h1PFA-2unE0/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><br />
</a></div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"><v:shapetype coordsize="21600,21600" filled="f" id="_x0000_t75" o:preferrelative="t" o:spt="75" path="m@4@5l@4@11@9@11@9@5xe" stroked="f"> <v:stroke joinstyle="miter"> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0"> <v:f eqn="sum @0 1 0"> <v:f eqn="sum 0 0 @1"> <v:f eqn="prod @2 1 2"> <v:f eqn="prod @3 21600 pixelWidth"> <v:f eqn="prod @3 21600 pixelHeight"> <v:f eqn="sum @0 0 1"> <v:f eqn="prod @6 1 2"> <v:f eqn="prod @7 21600 pixelWidth"> <v:f eqn="sum @8 21600 0"> <v:f eqn="prod @7 21600 pixelHeight"> <v:f eqn="sum @10 21600 0"> </v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:formulas> <v:path gradientshapeok="t" o:connecttype="rect" o:extrusionok="f"> <o:lock aspectratio="t" v:ext="edit"> </o:lock></v:path></v:stroke></v:shapetype><v:shape id="_x0000_i1025" style="height: 256.5pt; width: 387pt;" type="#_x0000_t75"> <v:imagedata cropbottom="1851f" cropright="1023f" croptop="8889f" o:title="" src="file:///C:\DOCUME~1\Admin\LOCALS~1\Temp\msohtml1\01\clip_image001.png"> </v:imagedata></v:shape>Рисунок 1 – Меню с закладками</div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Успехов!</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div></div>dedMazDiehttp://www.blogger.com/profile/18195725128796745204noreply@blogger.com4tag:blogger.com,1999:blog-2402315195124580440.post-1059429627868973982011-06-23T22:22:00.001+06:002011-06-30T21:39:35.477+06:00MVC - часть2. Data Access Level<div dir="ltr" style="text-align: left;" trbidi="on"><br />
<div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">В <a href="http://dedmazdie.blogspot.com/2011/06/mvc-1.html">прошлой статье</a> мы сошлись на том, что получать данные в контроллере не <span style="mso-spacerun: yes;"> </span>есть хорошо и правильно. И это так. С данными должна работать модель. Но обычно программисты выделяют еще один уровень, еще одну модель, которую будет использовать основная, - Data Access Level. То есть модель, которая непосредственно получает данные из БД, XML и других источников. И тут мы подходим к вопросу о технологии доступа к данным. Т.к. мы программируем в мире объектно-ориентированном, то и логичным было появление так называемых <b style="mso-bidi-font-weight: normal;">объектно-ориентированных технологий доступа к данным - </b><a href="http://ru.wikipedia.org/wiki/ORM" title="ORM">object-relational mapping</a> (ORM). Что это, какие виды и типы бывают, мы рассматривать не будем – оставляю это для самостоятельного изучения. В нашем же проекте мы будем использовать технологию <b>ADO.NET Entity Framework</b> (EF), являющейся ORM решением для .Net Framework от <span lang="EN-US" style="mso-ansi-language: EN-US;">Microsoft</span>. </div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Напомню, что у нас есть таблица в БД MS SQL Server с данными об объектах нашей карты (листинг 1).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 1</b> – Таблица объектов карты</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 10pt;">CREATE</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt;"> <span style="color: blue;">TABLE</span> [dbo]<span style="color: grey;">.</span>[Map] <span style="color: grey;">(</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt;"><span style="mso-spacerun: yes;"> </span>[id] <span style="color: blue;">int</span> <span style="color: blue;">IDENTITY</span><span style="color: grey;">(</span>1<span style="color: grey;">,</span> 1<span style="color: grey;">)</span> <span style="color: grey;">NOT</span> <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt;"><span style="mso-spacerun: yes;"> </span>[ObjectName] <span style="color: blue;">nvarchar</span><span style="color: grey;">(</span>128<span style="color: grey;">)</span> <span style="color: blue;">COLLATE</span> Cyrillic_General_CI_AS <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt;"><span style="mso-spacerun: yes;"> </span>[ObjectAddress] <span style="color: blue;">nvarchar</span><span style="color: grey;">(</span>256<span style="color: grey;">)</span> <span style="color: blue;">COLLATE</span> Cyrillic_General_CI_AS <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt;"><span style="mso-spacerun: yes;"> </span>[Longitude] <span style="color: blue;">nvarchar</span><span style="color: grey;">(</span>128<span style="color: grey;">)</span> <span style="color: blue;">COLLATE</span> Cyrillic_General_CI_AS <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt;"><span style="mso-spacerun: yes;"> </span>[Latitude] <span style="color: blue;">nvarchar</span><span style="color: grey;">(</span>128<span style="color: grey;">)</span> <span style="color: blue;">COLLATE</span> Cyrillic_General_CI_AS <span style="color: grey;">NULL,</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt;"><span style="mso-spacerun: yes;"> </span></span><span style="color: blue; font-family: "Courier New"; font-size: 10pt;">PRIMARY</span><span style="font-family: "Courier New"; font-size: 10pt;"> <span style="color: blue;">KEY</span> <span style="color: blue;">CLUSTERED</span> <span style="color: grey;">(</span>[id]<span style="color: grey;">)</span></span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><span style="color: grey; font-family: "Courier New"; font-size: 10pt; line-height: 150%;">)</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Создадим <span lang="EN-US" style="mso-ansi-language: EN-US;">Data</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">Entity</span> модель по этой таблице. Для это щелкаем правой кнопкой на папке Model нашего проекта, выбираем там <span lang="EN-US" style="mso-ansi-language: EN-US;">Add</span> – <span lang="EN-US" style="mso-ansi-language: EN-US;">New</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">Item</span>, видим диалоговое окно как на рисунке 1.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ60K15rAzczmY_csBGTx4P-L380B-tnDtySGOLyPCE7pvGGcGeYqq0LSY2tqgDuL40O0cL-5_9EfzIhPidCQnc33-FGi8xjA1JNmQVCfJVw9z-XqT184WNXLOcewJC8umYKiMUHp-6-g/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="221" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ60K15rAzczmY_csBGTx4P-L380B-tnDtySGOLyPCE7pvGGcGeYqq0LSY2tqgDuL40O0cL-5_9EfzIhPidCQnc33-FGi8xjA1JNmQVCfJVw9z-XqT184WNXLOcewJC8umYKiMUHp-6-g/s320/1.jpg" width="320" /></a></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;"> Рисунок 1</b> – Добавление нового элемента в проект</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">В этом диалоге выбираем раздел Data – <span lang="EN-US" style="mso-ansi-language: EN-US;">ADO</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">NET</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">Entity</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">Data</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">Model</span>, называем нашу модель (например, <span lang="EN-US" style="mso-ansi-language: EN-US;">MapDataModel</span>). Далее студия запускает визард, который помогает нам правильно сформировать модель. Идем<span style="mso-ansi-language: EN-US;"> </span>по<span style="mso-ansi-language: EN-US;"> </span>порядку<span lang="EN-US" style="mso-ansi-language: EN-US;">: Choose Model Contents – Generate from database, Choose Your Data Connection – </span>вносите<span style="mso-ansi-language: EN-US;"> </span>настройки<span style="mso-ansi-language: EN-US;"> </span>коннекта<span style="mso-ansi-language: EN-US;"> </span>к<span style="mso-ansi-language: EN-US;"> </span>вашей<span style="mso-ansi-language: EN-US;"> </span>БД<span lang="EN-US" style="mso-ansi-language: EN-US;">, Choose Your Database Objects – Tables (Map). </span>Все, готово! Через пару секунд студия сгенерирует нам модель доступа к данным (рисунок 2).</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNH-DEaaECjWbCgj69SORIoIc7b04oem14xkBsClDu7n_pklFGkZLPU6vtFFU1dcOIINlqfwCg9x8ln1qwd-5BKA3NlEbe61ywsxCLi73BPi2Bx6gQ6zRnPcyyZcrp7S_XRDbqQouuyzg/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNH-DEaaECjWbCgj69SORIoIc7b04oem14xkBsClDu7n_pklFGkZLPU6vtFFU1dcOIINlqfwCg9x8ln1qwd-5BKA3NlEbe61ywsxCLi73BPi2Bx6gQ6zRnPcyyZcrp7S_XRDbqQouuyzg/s320/1.jpg" width="320" /></a></div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"><v:shape id="_x0000_i1026" style="height: 301.5pt; width: 387pt;" type="#_x0000_t75"> <v:imagedata o:title="" src="file:///C:\DOCUME~1\Admin\LOCALS~1\Temp\msohtml1\01\clip_image003.png"> </v:imagedata></v:shape></div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Рисунок 2</b> – Модель данных</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">У нас данные хранятся крайне просто. Если не сказать примитивно. Если же данные образуют сложную систему с внешними ключами и прочим, то студия это все поймет и сгенерирует соответствующее количество классов с соответствующими связями. Если мы заглянем в файл <span lang="EN-US" style="mso-ansi-language: EN-US;">MapDataModel</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">Designer</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">cs</span>, то увидим содержимое рисунка 3.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_6UFtFNyiDLgy1ekV7ATCjAESXF9CNCjGv-sJsT0xWGB9WAB6PRjkVn1FPBOievsv6pCVoATsIqpr5ptU3qwnP4L2eRKjzWY6Kg0m_x_rD1LjDldwqYKgnzbx8uctoFM-NLACybSUJNQ/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_6UFtFNyiDLgy1ekV7ATCjAESXF9CNCjGv-sJsT0xWGB9WAB6PRjkVn1FPBOievsv6pCVoATsIqpr5ptU3qwnP4L2eRKjzWY6Kg0m_x_rD1LjDldwqYKgnzbx8uctoFM-NLACybSUJNQ/s320/1.jpg" width="320" /></a></div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"><v:shape id="_x0000_i1027" style="height: 246pt; width: 315pt;" type="#_x0000_t75"> <v:imagedata o:title="" src="file:///C:\DOCUME~1\Admin\LOCALS~1\Temp\msohtml1\01\clip_image005.png"> </v:imagedata></v:shape></div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Рисунок 3</b> – Классы, описывающие данные</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Теперь как с этим работать. Давайте<span style="mso-ansi-language: EN-US;"> </span>создадим<span style="mso-ansi-language: EN-US;"> </span>модель<span lang="EN-US" style="mso-ansi-language: EN-US;"> DataManager (Model – Add –Class - DataManager). </span>Создадим<span style="mso-ansi-language: EN-US;"> </span>конструктор<span lang="EN-US" style="mso-ansi-language: EN-US;"> (</span>листинг<span lang="EN-US" style="mso-ansi-language: EN-US;"> 2).</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг</b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;"> 2</span></b><span lang="EN-US" style="mso-ansi-language: EN-US;"> – </span>Конструктор<span lang="EN-US" style="mso-ansi-language: EN-US;"> DataManager</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">private</span> <span style="color: #2b91af;">ProjectEntities</span> _db;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> DataManager()</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: "Consolas"; font-size: 9.5pt;">{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>_db = <span style="color: blue;">new</span> <span style="color: #2b91af;">ProjectEntities</span>();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Тут все понятно – мы создаем соединение к нашей БД, чтоб через него брать данные. Далее нам нужно сформировать лист, который будет отдаваться клиенту (листинг 3).</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 3</b> – Формирование списка объектов для карты</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: #2b91af;">List</span><<span style="color: blue;">object</span>> GetListObjectMap()</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">List</span><<span style="color: blue;">object</span>> list = <span style="color: blue;">new</span> <span style="color: #2b91af;">List</span><<span style="color: blue;">object</span>>();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">foreach</span> (<span style="color: #2b91af;">Map</span> item <span style="color: blue;">in</span> _db.Map)</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">var</span> data = <span style="color: blue;">new</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>Name = item.ObjectName,</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>Latitude = item.Latitude,<span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: green; font-family: "Consolas"; font-size: 9.5pt;">//</span><span style="color: green; font-family: "Consolas"; font-size: 9.5pt;">широта</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span>Longitude = item.Longitude, <span style="color: green;">//</span></span><span style="color: green; font-family: "Consolas"; font-size: 9.5pt;">долгота</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: "Consolas"; font-size: 9.5pt;">Html = item.ObjectAddress,</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>};</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>list.Add(data);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">return</span> list;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: "Consolas"; font-size: 9.5pt;">}</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Тут тоже понятно – каждую запись из таблицы БД в цикле мы добавляем в список.</div><div class="MsoNormal" style="line-height: 150%; mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;">Теперь идем в контроллер и очищаем метод <span style="font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;">ObjectToMap()</span>. Создадим в нем экземпляр нашего DataManage<span lang="EN-US" style="mso-ansi-language: EN-US;">r</span> и сформированный лист отдадим клиенту (листинг 4).</div><div class="MsoNormal" style="line-height: 150%; mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 4</b> – Обновленный метод контроллера <span lang="EN-US" style="mso-ansi-language: EN-US;">ObjectToMap</span>()</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>[<span style="color: #2b91af;">AcceptVerbs</span>(<span style="color: #2b91af;">HttpVerbs</span>.Get)]</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: #2b91af;">JsonResult</span> ObjectToMap()</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">DataManager</span> dm = <span style="color: blue;">new</span> <span style="color: #2b91af;">DataManager</span>();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">return</span> Json(dm.GetListObjectMap(), <span style="color: #2b91af;">JsonRequestBehavior</span>.AllowGet);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: "Consolas"; font-size: 9.5pt;">}</span></div><div class="MsoNormal" style="line-height: 150%; mso-layout-grid-align: none; text-autospace: none; text-indent: 26.95pt;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioP06h7Jh1Yb6lGK1_cvgUvneMcNJvGqldlGQ17zK8m39ahOpijvBc78qNcD2Ft3_kYlbDfkzEYPX1tuMydsjQZLmsq4HqpBZxLl4Hj3yn8AceCsZzBNezsWrFTb2S4lh98N7Y5J7OIHg/s1600/1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="212" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioP06h7Jh1Yb6lGK1_cvgUvneMcNJvGqldlGQ17zK8m39ahOpijvBc78qNcD2Ft3_kYlbDfkzEYPX1tuMydsjQZLmsq4HqpBZxLl4Hj3yn8AceCsZzBNezsWrFTb2S4lh98N7Y5J7OIHg/s320/1.jpg" width="320" /></a></div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"><span lang="EN-US" style="mso-ansi-language: EN-US;"><v:shape id="_x0000_i1028" style="height: 270pt; width: 407.25pt;" type="#_x0000_t75"> <v:imagedata cropbottom="1659f" cropright="1069f" croptop="8902f" o:title="" src="file:///C:\DOCUME~1\Admin\LOCALS~1\Temp\msohtml1\01\clip_image007.png"> </v:imagedata></v:shape></span></div><div align="center" class="MsoNormal" style="line-height: 150%; text-align: center; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Рисунок 4</b> – Результат работы</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Просто? Вот так красиво и удобно. </div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Для лучшего понимания того, как и что делать, рекомендую изучать видеоподкасты на <a href="http://www.techdays.ru/Category.aspx?Tag=MVC%2bFramework">сайте </a>. В них с комментариями описываются основные приемы работы от самых простых к сложным.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">В следующей статье мы рассмотрим, как можно редактировать объекты нашей карты.</div><br />
</div>dedMazDiehttp://www.blogger.com/profile/18195725128796745204noreply@blogger.com11tag:blogger.com,1999:blog-2402315195124580440.post-10626600692257819852011-06-20T19:29:00.003+06:002011-06-20T19:33:25.257+06:00MVC - часть1. Загрузка данных<div dir="ltr" style="text-align: left;" trbidi="on"><br />
<div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Итак, у нас те же исходные данные, что и <a href="http://dedmazdie.blogspot.com/2011/02/blog-post_24.html">раньше</a>. Но приложение будем строить <span lang="EN-US" style="mso-ansi-language: EN-US;">ASP</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">Net</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">MVC</span> 3 <span lang="EN-US" style="mso-ansi-language: EN-US;">Web</span><span lang="EN-US"> </span><span lang="EN-US" style="mso-ansi-language: EN-US;">Application</span>. Студия предложит выбрать шаблон приложения, я выбираю Internet <span lang="EN-US" style="mso-ansi-language: EN-US;">Application</span><span lang="EN-US"> </span>и движок Razor (позднее обсудим, почему именно так стоит делать). Теперь у нас есть заготовка нашего проекта. В этой заготовке есть лишние элементы (они особо не помешают, но и место занимать ни к чему), поэтому я удаляю: контроллер AccountController.cs, модель AccountModels.cs, удаляю папку <span lang="EN-US" style="mso-ansi-language: EN-US;">Account</span> во <span lang="EN-US" style="mso-ansi-language: EN-US;">View</span>, а также файлы _LogOnPartial.cshtml и Error.cshtml. Этого будет достаточно для начала работы. При запуске проекта студия поругается на файл _Layout.cshtml на строку:</div><div class="MsoNormal" style="line-height: 150%; mso-layout-grid-align: none; mso-outline-level: 1; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: blue; font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;"><</span><span lang="EN-US" style="color: maroon; font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;">div</span><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;"> <span style="color: red;">id</span><span style="color: blue;">="logindisplay"></span></span></div><div class="MsoNormal" style="line-height: 150%; mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="background: yellow; mso-highlight: yellow;">@</span>Html.Partial(<span style="color: #a31515;">"_LogOnPartial"</span>)</span></div><div class="MsoNormal" style="line-height: 150%; mso-layout-grid-align: none; mso-outline-level: 1; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span></span><span style="color: blue; font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;"></</span><span style="color: maroon; font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;">div</span><span style="color: blue; font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;">></span></div><div class="MsoNormal" style="line-height: 150%; mso-layout-grid-align: none; text-autospace: none;">это произошло из-за того, что представление, на которое тут идет ссылка, мы удалили. Заменим ссылку на тег <span style="color: blue; font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;"><</span><span style="color: maroon; font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;">br</span><span style="font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;"> <span style="color: blue;">/>. </span></span>Запустим снова проект – все работает.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Для начала создадим саму карту. Открываем <span lang="EN-US" style="mso-ansi-language: EN-US;">Index</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">cshtml</span> и убираем все кроме верхних трех строк. Ниже вставляем известный по <a href="http://dedmazdie.blogspot.com/2011/02/blog-post_24.html">прошлым статьям</a> код (листинг 1).</div><div class="MsoNormal" style="line-height: 150%; mso-outline-level: 1; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 1</b> – Загрузка карты</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="color: blue; font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: blue; font-family: "Consolas"; font-size: 9.5pt;"><</span><span lang="EN-US" style="color: maroon; font-family: "Consolas"; font-size: 9.5pt;">script</span><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"> <span style="color: red;">src</span><span style="color: blue;">="http://api-maps.yandex.ru/1.1/index.xml?key=”</span></span><span style="color: blue; font-family: "Consolas"; font-size: 9.5pt;">тут</span><span style="color: blue; font-family: "Consolas"; font-size: 9.5pt;"> </span><span style="color: blue; font-family: "Consolas"; font-size: 9.5pt;">ваш</span><span style="color: blue; font-family: "Consolas"; font-size: 9.5pt;"> </span><span style="color: blue; font-family: "Consolas"; font-size: 9.5pt;">ключ</span><span lang="EN-US" style="color: blue; font-family: "Consolas"; font-size: 9.5pt;">”</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: red;">type</span><span style="color: blue;">="text/javascript"></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"></</span><span style="color: maroon;">script</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: maroon;">script</span> <span style="color: red;">type</span><span style="color: blue;">="text/javascript"</span> <span style="color: red;">src</span><span style="color: blue;">="../../Scripts/jquery-1.5.1.min.js"></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"></</span><span style="color: maroon;">script</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: maroon;">script</span> <span style="color: red;">type</span><span style="color: blue;">="text/javascript"</span> <span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="color: blue; font-family: "Consolas"; font-size: 9.5pt;">var</span><span style="font-family: "Consolas"; font-size: 9.5pt;"> group = [];</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">var</span> map;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>$(document).ready(<span style="color: blue;">function</span>() {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: darkgreen;">// Найдем на странице html элемент в котором будет размещаться карта</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;">map = <span style="color: blue;">new</span> YMaps.Map(YMaps.jQuery(<span style="color: maroon;">"#YMapsID"</span>)[0]);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>map.setCenter(<span style="color: blue;">new</span> YMaps.GeoPoint(55.975669, 54.732613), 10);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: darkgreen;">// </span></span><span style="color: darkgreen; font-family: "Consolas"; font-size: 9.5pt;">добавим</span><span style="color: darkgreen; font-family: "Consolas"; font-size: 9.5pt;"> </span><span style="color: darkgreen; font-family: "Consolas"; font-size: 9.5pt;">контролы</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>map.addControl(<span style="color: blue;">new</span> YMaps.ToolBar());</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>map.addControl(<span style="color: blue;">new</span> YMaps.Zoom());</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>map.addControl(<span style="color: blue;">new</span> YMaps.TypeControl());</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>map.enableScrollZoom();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">var</span> searchControl = <span style="color: blue;">new</span> YMaps.SearchControl({</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: "Consolas"; font-size: 9.5pt;">resultsPerPage: 2,<span style="mso-spacerun: yes;"> </span><span style="color: darkgreen;">// Количество объектов на странице</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>useMapBounds: 1<span style="mso-spacerun: yes;"> </span><span style="color: darkgreen;">// Объекты, найденные в видимой области карты</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; mso-outline-level: 1; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: darkgreen;">// будут показаны в начале списка</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>});</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;">map.addControl(searchControl);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>});</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"></</span><span style="color: maroon;">script</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: maroon;">div</span> <span style="color: red;">id</span><span style="color: blue;">="YMapsID"</span> <span style="color: red;">style</span><span style="color: blue;">="</span><span style="color: red;">width</span><span style="color: blue;">: 100%; </span><span style="color: red;">height</span><span style="color: blue;">: 600px; </span><span style="color: red;">padding-left</span><span style="color: blue;">: 0px; "></span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="color: blue; font-family: "Consolas"; font-size: 9.5pt;"></</span><span style="color: maroon; font-family: "Consolas"; font-size: 9.5pt;">div</span><span style="color: blue; font-family: "Consolas"; font-size: 9.5pt;">></span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Запускаем проект и видим пустую карту. Это готово, хорошо. Теперь нам нужны данные на этой карте. В самой первой статье для загрузки мы пользовались <span lang="EN-US" style="mso-ansi-language: EN-US;">Ht</span>tp<span lang="EN-US" style="mso-ansi-language: EN-US;">Handler</span>’ом. В архитектуре <span lang="EN-US" style="mso-ansi-language: EN-US;">MVC</span><span lang="EN-US"> </span>им пользоваться не с руки по архитектурным соображениям, поэтому попробуем загрузить данные в методе контроллера. Для этого откроем наш HomeController и добавим ему метод, как в листинге 2.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 2</b> – Получение данных</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>[<span style="color: #2b91af;">AcceptVerbs</span>(<span style="color: #2b91af;">HttpVerbs</span>.Get)]</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: blue; font-family: "Consolas"; font-size: 9.5pt;">public</span><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"> <span style="color: #2b91af;">JsonResult</span> ObjectToMap()</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">List</span><<span style="color: blue;">object</span>> list = <span style="color: blue;">new</span> <span style="color: #2b91af;">List</span><<span style="color: blue;">object</span>>();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">string</span> connString = <span style="color: #2b91af;">ConfigurationManager</span>.ConnectionStrings[<span style="color: #a31515;">"project"</span>].ConnectionString;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">using</span> (<span style="color: #2b91af;">SqlConnection</span> con = <span style="color: blue;">new</span> <span style="color: #2b91af;">SqlConnection</span>(connString))</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">string</span> sql = <span style="color: #a31515;">"exec dbo.p_Get_MyObject_Info "</span>;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">SqlCommand</span> cmd = <span style="color: blue;">new</span> <span style="color: #2b91af;">SqlCommand</span>(sql, con);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>con.Open();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">using</span> (<span style="color: #2b91af;">SqlDataReader</span> reader = cmd.ExecuteReader())</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">while</span> (reader.Read())</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: blue;">var</span> data = <span style="color: blue;">new</span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>Name = reader.GetString(0),</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>Latitude = reader.GetString(2),<span style="mso-spacerun: yes;"> </span><span style="color: green;">//</span></span><span style="color: green; font-family: "Consolas"; font-size: 9.5pt;">широта</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>Longitude = reader.GetString(1), <span style="color: green;">//</span></span><span style="color: green; font-family: "Consolas"; font-size: 9.5pt;">долгота</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span>};</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>list.Add(data);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>con.Close();</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">return</span> Json(list, <span style="color: #2b91af;">JsonRequestBehavior</span>.AllowGet);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: "Consolas"; font-size: 9.5pt;">}</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; mso-layout-grid-align: none; text-align: justify; text-autospace: none;">Как видно из этого листинга, код почти идентичен коду HttpHandler'а. Есть одно отличие – перед телом метода указан атрибут <span style="font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;">[<span style="color: #2b91af;">AcceptVerbs</span>(<span style="color: #2b91af;">HttpVerbs</span>.Get)]</span>. Он отвечает за то, что метод будет обрабатывать http-запрос Get, в то время как <span lang="EN-US" style="mso-ansi-language: EN-US;">Post</span> у нас пока не реализован. Не забудьте в <span lang="EN-US" style="mso-ansi-language: EN-US;">Web</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">Config</span> добавить строку соединения <span lang="EN-US" style="mso-ansi-language: EN-US;">project</span> и реализовать процедуру, формирующую данные для карты <span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;">dbo</span><span style="font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;">.</span><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;">p</span><span style="font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;">_</span><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;">Get</span><span style="font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;">_</span><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;">MyObject</span><span style="font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;">_</span><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;">Info</span>. Хорошо. Теперь мы должны получить данные на стороне клиента и отобразить их.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Для этого в представлении Index к jQuery коду добавим функцию из листинга 3.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 3</b> – Получение данных на клиенте</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">function</span> getObject() {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;">$.getJSON(<span style="color: maroon;">"/Home/ObjectToMap"</span>, <span style="color: blue;">null</span>, <span style="color: blue;">function</span> (mapObj) {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: darkgreen;">// </span></span><span style="color: darkgreen; font-family: "Consolas"; font-size: 9.5pt;">Группа</span><span style="color: darkgreen; font-family: "Consolas"; font-size: 9.5pt;"> </span><span style="color: darkgreen; font-family: "Consolas"; font-size: 9.5pt;">объектов</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>group[<span style="color: maroon;">"new"</span>] = <span style="color: blue;">new</span> YMaps.GeoObjectCollection(<span style="color: maroon;">"default#"</span>);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>$.each(mapObj, <span style="color: blue;">function</span> (i) {</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">var</span> point = <span style="color: blue;">new</span> YMaps.GeoPoint(<span style="color: blue;">this</span>.Longitude, <span style="color: blue;">this</span>.Latitude);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">var</span> placemark = <span style="color: blue;">new</span> YMaps.Placemark(point);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>placemark.name = <span style="color: blue;">this</span>.Name;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: darkgreen;">//</span></span><span style="color: darkgreen; font-family: "Consolas"; font-size: 9.5pt;">тут</span><span style="color: darkgreen; font-family: "Consolas"; font-size: 9.5pt;"> </span><span style="color: darkgreen; font-family: "Consolas"; font-size: 9.5pt;">засовываем</span><span lang="EN-US" style="color: darkgreen; font-family: "Consolas"; font-size: 9.5pt;"> html</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>placemark.description = <span style="color: blue;">this</span>.Html + <span style="color: maroon;">"<br />"</span>;</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>group[<span style="color: maroon;">"new"</span>].add(placemark);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>});</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><br />
</div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>map.addOverlay(group[<span style="color: maroon;">"new"</span>]);</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span lang="EN-US" style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: "Consolas"; font-size: 9.5pt;">});</span></div><div class="MsoNormal" style="mso-layout-grid-align: none; text-autospace: none;"><span style="font-family: "Consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span>};</span></div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Тут мы обращаемся к методу контроллера, который реализовали раньше и в цикле грузим данные на карту. И, наконец, нужно вызвать эту функцию в конце функции <span style="font-family: "Consolas"; font-size: 9.5pt; line-height: 150%;">$(document).ready. </span>Запускаем проект и видим, что на карте отображны наши объекты.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">Победа? Как бы не так! Оказывается, получение данных в контроллере не есть методологически верное решение. Исправлять ситуацию будем в следующей статье.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 26.95pt;">И, как всегда, принимаются пожелания, указания на недочеты и ошибки, вопросы.</div><br />
</div>dedMazDiehttp://www.blogger.com/profile/18195725128796745204noreply@blogger.com0tag:blogger.com,1999:blog-2402315195124580440.post-27097092629778582952011-06-14T19:20:00.003+06:002011-06-20T19:36:10.262+06:00MVC<div dir="ltr" style="text-align: left;" trbidi="on"><br />
<div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 27.0pt;">Любой программист .Net (да и большинство других) слышал про загадочную аббревиатуру MVC. Что это такое? </div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 27.0pt;">Это архитектура приложения на <span lang="EN-US" style="mso-ansi-language: EN-US;">ASP</span>.<span lang="EN-US" style="mso-ansi-language: EN-US;">Net</span>, призванная устранить недостатки традиционной платформы. <span lang="EN-US" style="mso-ansi-language: EN-US;">MVC</span> – это <span lang="EN-US" style="mso-ansi-language: EN-US;">model</span> – <span lang="EN-US" style="mso-ansi-language: EN-US;">view</span> – <span lang="EN-US" style="mso-ansi-language: EN-US;">controller</span><span lang="EN-US"> </span>или модель – представление – контроллер. Т.е. приложение, построенное на данной архитектуре, будет иметь три выраженные части – модель (моделирует предметную область, работает с данными), представление (отображает информацию, по сути, является интерфейсом приложения), контроллер (управляет реакцией модели и представления). Не претендую на стопроцентную корректность, но примерно так.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 27.0pt;">В чем же преимущество этой архитектуры? Не буду перечислять классику, с ней можно ознакомиться самостоятельно в интернете или книгах, скажу, что прельстило лично меня. Когда стал «проводить разведку» по данной технологии, слышал разные мнения – и уменьшает, «облегчает» html-код, и просто создан для работы на клиенте с j<span lang="EN-US" style="mso-ansi-language: EN-US;">Q</span>uery, и прочая, прочая… А для меня самым важным оказалось то, что при помощи такой архитектуры в приложение вносилась довольно жесткая структуризация. А это позволяет повысить эффективность и разработки, и доработки, и поддержки, позволяет разделять ответственность, разрабатывать тесты к отдельным компонентам системы и многое другое. Короче, я за порядок и системность.</div><div class="MsoNormal" style="line-height: 150%; text-align: justify; text-indent: 27.0pt;">Естественно, что мне захотелось понять, как разрабатывать приложения с такой архитектурой, как все это работает и т.д. И я решил переделать «карточный» проект с модулем Yandex.Maps по-новой – с использованием MVC3. Далее я буду выкладывать статьи, где буду описывать свои «мытарства» по освоению данной технологии.</div><br />
</div>dedMazDiehttp://www.blogger.com/profile/18195725128796745204noreply@blogger.com0tag:blogger.com,1999:blog-2402315195124580440.post-37159048228093816472011-03-23T16:12:00.003+05:002011-06-20T19:36:35.868+06:00jQuery checkbox tree menu<div dir="ltr" style="text-align: left;" trbidi="on"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;">Недавно был озадачен написанием древовидного меню с чекбоксами, структура которого «сидит» в БД. Поискав на просторах сети, наткнулся на <a href="http://code.google.com/p/checkboxtree/">то, что меня устраивало</a>. Оставалось только допилить это дело, чтоб структура автоматически бралась из БД.<span lang="EN-US" style="mso-ansi-language: EN-US;"></span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;">В одной из <a href="http://dedmazdie.blogspot.com/2011/03/sql.html">прошлых статей</a> использовался пример с библиотекой. Воспользуемся им для построения меню.</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;">Для получения данных о структуре меню на клиенте воспользуемся приемом из другой <a href="http://dedmazdie.blogspot.com/2011/02/blog-post_24.html">прошлой статьи</a>. А именно возьмем данные из БД через http handler. Данные тоже запакуем в JSON. Код handler'а приведен в листинге 1.</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 1</b> – Код handler'а для формирования JSON со структурой меню</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="background-attachment: scroll; background-clip: border-box; background-color: yellow; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; font-family: "Courier New"; font-size: 8pt;"><%</span><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 8pt;">@</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"> <span style="color: #a31515;">WebHandler</span> <span style="color: red;">Language</span><span style="color: blue;">="C#"</span> <span style="color: red;">Class</span><span style="color: blue;">="Hierarchy"</span> <span style="background: yellow; mso-highlight: yellow;">%></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 8pt;">using</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"> System;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 8pt;">using</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"> System.Web;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 8pt;">using</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"> System.Web.Script.Serialization;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 8pt;">using</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"> System.Web.Configuration;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 8pt;">using</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"> System.Data.SqlClient;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 8pt;">using</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"> System.Net;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 8pt;">using</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"> System.Collections.Generic;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 8pt;">using</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"> System.Runtime.Serialization.Json;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 8pt;">using</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"> System.IO;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 8pt;">public</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"> <span style="color: blue;">class</span> <span style="color: #2b91af;">Hierarchy</span> : <span style="color: #2b91af;">IHttpHandler</span> {</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span></span><span style="color: green; font-family: "Courier New"; font-size: 8pt;">// получение структуры всех объектов для построения меню</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 8pt;">public</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"> <span style="color: blue;">void</span> ProcessRequest (<span style="color: #2b91af;">HttpContext</span> context) {</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Dictionary</span><<span style="color: blue;">string</span>, <span style="color: #2b91af;">List</span><<span style="color: blue;">string</span>>> obj = <span style="color: blue;">new</span> <span style="color: #2b91af;">Dictionary</span><<span style="color: blue;">string</span>, <span style="color: #2b91af;">List</span><<span style="color: blue;">string</span>>>();</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">string</span> connString = <span style="color: #2b91af;">WebConfigurationManager</span>.ConnectionStrings[<span style="color: #a31515;">"connString"</span>].ConnectionString;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: blue;">using</span> (<span style="color: #2b91af;">SqlConnection</span> con = <span style="color: blue;">new</span> <span style="color: #2b91af;">SqlConnection</span>(connString))</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">string</span> sql = <span style="color: #a31515;">"exec [dbo].p_Get_Hierarchy"</span>;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">SqlCommand</span> cmd = <span style="color: blue;">new</span> <span style="color: #2b91af;">SqlCommand</span>(sql, con);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>con.Open();</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">using</span> (<span style="color: #2b91af;">SqlDataReader</span> reader = cmd.ExecuteReader())</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">while</span> (reader.Read())</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>obj.Add(reader.GetString(0), <span style="color: blue;">new</span> <span style="color: #2b91af;">List</span><<span style="color: blue;">string</span>>());</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">using</span> (<span style="color: #2b91af;">SqlConnection</span> con1 = <span style="color: blue;">new</span> <span style="color: #2b91af;">SqlConnection</span>(connString))</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">string</span> sql1 = <span style="color: #a31515;">"exec [dbo].p_Get_Hierarchy_Stand '"</span> + </span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;">reader.GetString(0) + <span style="color: #a31515;">"'"</span>;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">SqlCommand</span> cmd1 = <span style="color: blue;">new</span> <span style="color: #2b91af;">SqlCommand</span>(sql1, con1);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>con1.Open();</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: blue;">using</span> (<span style="color: #2b91af;">SqlDataReader</span> reader1 = cmd1.ExecuteReader())</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">while</span> (reader1.Read())</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>obj[reader.GetString(0)].Add(reader1.GetString(0));</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: "Courier New"; font-size: 8pt;">}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>con1.Close();</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>con.Close();</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">JavaScriptSerializer</span> s = <span style="color: blue;">new</span> <span style="color: #2b91af;">JavaScriptSerializer</span>();</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">string</span> str = s.Serialize(obj);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>context.Response.ContentType = <span style="color: #a31515;">"text/plain"</span>;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>context.Response.Write(str);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>context.Response.End();</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: blue;">bool</span> IsReusable {</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">get</span> {</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">return</span> <span style="color: blue;">false</span>;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 8pt;">}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;">Как видно из листинга, в нем используются две <span lang="EN-US" style="mso-ansi-language: EN-US;">sql</span>-процедуры для получения структуры меню. Их код приведен в листинге 2.</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 2</b> – <span lang="EN-US" style="mso-ansi-language: EN-US;">Sql</span>-процедуры для получения структуры меню</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 27pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">CREATE</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> <span style="color: blue;">PROCEDURE</span> [dbo]<span style="color: grey;">.</span>p_Get_Hierarchy</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 27pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">AS</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 27pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">BEGIN</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 27pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">SELECT</span> <span style="color: blue;">DISTINCT</span> l<span style="color: grey;">.</span>Stand</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 27pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span style="color: blue; font-family: "Courier New"; font-size: 9pt;">FROM</span><span style="font-family: "Courier New"; font-size: 9pt;"> dbo<span style="color: grey;">.</span>t_Library l</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt 27pt; text-align: justify;"><span style="color: blue; font-family: "Courier New"; font-size: 9pt; line-height: 150%;">END</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt 27pt; text-align: justify;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 27pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">CREATE</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> <span style="color: blue;">PROCEDURE</span> [dbo]<span style="color: grey;">.</span>p_Get_Hierarchy_Stand</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 27pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-tab-count: 4;"> </span>@Stand <span style="color: blue;">nvarchar</span><span style="color: grey;">(</span>64<span style="color: grey;">)</span> <span style="color: grey;">=</span> <span style="color: grey;">NULL</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 27pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">AS</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 27pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">BEGIN</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 27pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">SELECT</span> <span style="color: blue;">DISTINCT</span> l<span style="color: grey;">.</span>Author</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 27pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">FROM</span> dbo<span style="color: grey;">.</span>t_Library l</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 27pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">WHERE</span> l<span style="color: grey;">.</span>Stand <span style="color: grey;">=</span> @Stand</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt 27pt; text-align: justify;"><span style="color: blue; font-family: "Courier New"; font-size: 9pt; line-height: 150%;">END</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt 27pt; text-align: justify;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;">Осталось только «поймать» эти данные на клиенте и построить по ним меню. Код построения меню приведен в листинге 3.</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 3</b> – Построение меню</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 8pt;"><</span><span lang="EN-US" style="color: #a31515; font-family: "Courier New"; font-size: 8pt;">script</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"> <span style="color: red;">type</span><span style="color: blue;">="text/javascript"</span> <span style="color: red;">src</span><span style="color: blue;">="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></</span><span style="color: #a31515;">script</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">link</span> <span style="color: red;">rel</span><span style="color: blue;">="stylesheet"</span> <span style="color: red;">type</span><span style="color: blue;">="text/css"</span> <span style="color: red;">href</span><span style="color: blue;">="jquery.checkboxtree.min.css"</span> <span style="color: blue;">/></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">script</span> <span style="color: red;">type</span><span style="color: blue;">="text/javascript"</span> <span style="color: red;">src</span><span style="color: blue;">="jquery.checkboxtree.min.js"></</span><span style="color: #a31515;">script</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">script</span> <span style="color: red;">type</span><span style="color: blue;">="text/javascript"</span> <span style="color: blue;">></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">function</span> load()</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: green;">// </span></span><span style="color: green; font-family: "Courier New"; font-size: 8pt;">создаем</span><span style="color: green; font-family: "Courier New"; font-size: 8pt;"> </span><span style="color: green; font-family: "Courier New"; font-size: 8pt;">меню</span><span lang="EN-US" style="color: green; font-family: "Courier New"; font-size: 8pt;"></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span>$.getJSON(<span style="color: #a31515;">'Hierarchy.ashx'</span>,<span style="mso-spacerun: yes;"> </span><span style="color: #a31515;">''</span>, <span style="color: blue;">function</span>(response)</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: green;">// </span></span><span style="color: green; font-family: "Courier New"; font-size: 8pt;">ловим</span><span lang="EN-US" style="color: green; font-family: "Courier New"; font-size: 8pt;"> json</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">var</span> json = eval(response); </span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: green;">// </span></span><span style="color: green; font-family: "Courier New"; font-size: 8pt;">формируем</span><span style="color: green; font-family: "Courier New"; font-size: 8pt;"> </span><span style="color: green; font-family: "Courier New"; font-size: 8pt;">меню</span><span lang="EN-US" style="color: green; font-family: "Courier New"; font-size: 8pt;"></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">var</span> html = <span style="color: #a31515;">'<ul id="tree6">'</span>;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">for</span> (<span style="color: blue;">var</span> n <span style="color: blue;">in</span> json) { <span style="color: green;">// Each top-level entry</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>html += <span style="color: #a31515;">'<li><input type="checkbox" id ="check">'</span> + n + <span style="color: #a31515;">'<ul>'</span>;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">for</span> (<span style="color: blue;">var</span> i = 0; i < json[n].length; i++) </span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>{ </span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span>html += <span style="color: #a31515;">'<li><input type="checkbox"<span style="mso-spacerun: yes;"> </span>class="checkbox" id="check">'</span> + json[n][i] + <span style="color: #a31515;">'</li>'</span>;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>html += <span style="color: #a31515;">'</ul></li>'</span>;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>html += <span style="color: #a31515;">'</ul>'</span>;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>$(<span style="color: #a31515;">'#menu'</span>).append(html);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>$(<span style="color: #a31515;">'#tree6'</span>).checkboxTree({</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>initializeChecked: <span style="color: #a31515;">'expanded'</span>,</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: "Courier New"; font-size: 8pt;">initializeUnchecked: <span style="color: #a31515;">'collapsed'</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>});</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>});</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt 18pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt 18pt; text-align: justify; text-indent: 26.95pt;"><span style="font-family: "Courier New"; font-size: 8pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"></</span><span style="color: #a31515;">script</span><span style="color: blue;">></span></span><span style="font-size: 8pt; line-height: 150%;"></span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;">Не забываем тэгу <i style="mso-bidi-font-style: normal;"><</i><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">body</span>></i> создать на <i style="mso-bidi-font-style: normal;">onload</i> «повесить» функцию <i style="mso-bidi-font-style: normal;">load().</i>Вот и все. В принципе, все довольно просто. Результат на рисунке 1.</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4QkGlQ36yETqeK-FvsrL8o3Yzbrv43BvSYX9LZyVX63jZXxrnSUQqIabgi3bw-CgT6MIlP-Ymi90AkSgQkpQDKmX2abzNlGKeh2SiVFBIKAuVFysc2uzzEoZ8OcVIC90SGmnrBRyYA2Y/s1600/1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" r6="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4QkGlQ36yETqeK-FvsrL8o3Yzbrv43BvSYX9LZyVX63jZXxrnSUQqIabgi3bw-CgT6MIlP-Ymi90AkSgQkpQDKmX2abzNlGKeh2SiVFBIKAuVFysc2uzzEoZ8OcVIC90SGmnrBRyYA2Y/s1600/1.JPG" /></a></div><div align="center" class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: center; text-indent: 26.95pt;"><br />
</div><div align="center" class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: center; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Рисунок 1</b> – Древовидное меню с чекбоксами<span lang="EN-US" style="mso-ansi-language: EN-US;"></span></div></div>dedMazDiehttp://www.blogger.com/profile/18195725128796745204noreply@blogger.com0tag:blogger.com,1999:blog-2402315195124580440.post-45709563682318452832011-03-21T15:15:00.001+05:002011-06-20T19:36:56.965+06:00Регламентные операции на уровне СУБД для MS SQL Server<div dir="ltr" style="text-align: left;" trbidi="on"><h2>Общие сведения</h2>Одной из часто встречающихся причин не оптимальной работы системы является неправильное или несвоевременное выполнение регламентных операций на уровне СУБД. Особенно важно выполнять эти регламентные процедуры в крупных информационных системах, которые работают под значительной нагрузкой и обслуживают одновременно большое количество пользователей. Специфика таких систем в том, что обычных действий, выполняемых СУБД автоматически (на основании настроек) оказывает недостаточно для эффективной работы.<br />
Если в работающей системе наблюдаются какие-либо симптомы проблем с производительностью, следует проверить, что в системе правильно настроены и регулярно выполняются все рекомендуемые регламентные операции на уровне СУБД.<br />
Выполнение регламентных процедур должно быть автоматизировано. Для автоматизации этих операций рекомендуется использовать встроенное средства MS SQL Server: Maintenance Plan. Существуют так же другие способы автоматизации выполнения этих процедур. В настоящей статье для каждой регламентной процедуры дан пример ее настройки при помощи Maintenance Plan для MS SQL Server 2005.<br />
Для MS SQL Server рекомендуется выполнять следующие регламентные операции:<br />
<ul><li><a href="http://www.blogger.com/post-create.g?blogID=2402315195124580440#P1"><span style="color: #006699;">Обновление статистик</span></a> </li>
<li><a href="http://www.blogger.com/post-create.g?blogID=2402315195124580440#P2"><span style="color: #006699;">Очистка процедурного КЭШа</span></a></li>
<li><a href="http://www.blogger.com/post-create.g?blogID=2402315195124580440#P3"><span style="color: #006699;">Дефрагментация индексов</span></a></li>
<li><a href="http://www.blogger.com/post-create.g?blogID=2402315195124580440#P4"><span style="color: #006699;">Реиндексация таблиц базы данных</span></a></li>
</ul>Рекомендуется <a href="http://www.blogger.com/post-create.g?blogID=2402315195124580440#Control"><span style="color: #006699;">регулярно контролировать</span></a> своевременность и правильность выполнения данных регламентных процедур.<br />
<h2><a href="http://www.blogger.com/" name="P1" title="P1"></a>Обновление статистик</h2>MS SQL Server строит план запроса на основании статистической информации о распределении значений в индексах и таблицах. Статистическая информация собирается на основании части (образца) данных и автоматически обновляется при изменении этих данных. Иногда этого оказывается недостаточно для того, что MS SQL Server стабильно строил наиболее оптимальный план выполнения всех запросов.<br />
В этом случае возможно проявление проблем с производительностью запросов. При этом в планах запросов наблюдаются характерные признаки неоптимальной работы (неоптимальные операции).<br />
Для того, чтобы гарантировать максимально правильную работу оптимизатора MS SQL Server рекомендуется регулярно обновлять статистики базы данных MS SQL.<br />
Для обновления статистик по всем таблицам базы данных необходимо выполнить следующий SQL запрос:<br />
<pre>exec sp_msforeachtable N'UPDATE STATISTICS ? WITH FULLSCAN'</pre>Обновление статистик не приводит к блокировке таблиц, и не будет мешать работе других пользователей. Статистика может обновляться настолько часто, насколько это необходимо. Следует учитывать, что нагрузка на сервер СУБД во время обновления статистик возрастет, что может негативно сказаться на общей производительности системы.<br />
Оптимальная частота обновления статистик зависит от величины и характера нагрузки на систему и определяется экспериментальным путем. Рекомендуется обновлять статистики <b>не реже одного раза в день</b>.<br />
Приведенный выше запрос обновляет статистики для всех таблиц базы данных. В реально работающей системе разные таблицы требуют различной частоты обновления статистик. Путем анализа планов запроса можно установить, какие таблицы больше других нуждаются в частом обновлении статистик, и настроить две (или более) различных регламентных процедуры: для часто обновляемых таблиц и для всех остальных таблиц. Такой подход позволит существенно снизить время обновления статистик и влияние процесса обновления статистики на работу системы в целом.<br />
<h3>Настройка автоматического обновления статистик (MS SQL 2005)</h3>Запустите MS SQL Server Management Studio и подключитесь к серверу СУБД. Откройте папку Management и создайте новый план обслуживания:<br />
<img alt=" " border="0" height="283" src="http://1cexpo.ru/images/stories/1c/1.png" width="360" /><br />
Создайте субплан (Add Sublan) и назовите его «Обновление статистик». Добавьте в него задачу Update Statistics Task из панели задач:<br />
<img alt=" " border="0" height="642" src="http://1cexpo.ru/images/stories/1c/2.png" width="711" /><br />
Настройте расписание обновления статистик. Рекомендуется обновлять статистики не реже одного раза в день. При необходимости частота обновления статистик может быть увеличена.<br />
Настройте параметры задачи. Для этого следует два раза кликнуть на задачу в правом нижнем углу окна. В появившейся форме укажите имя базу данных (или несколько баз данных) для которых будет выполняться обновление статистик. Кроме этого вы можете указать для каких таблиц обновлять статистики (если точно неизвестно, какие таблицы требуется указать, то устанавливайте значение All).<br />
Обновление статистик необходимо проводить с включенной опцией Full Scan.<br />
<img alt=" " border="0" height="404" src="http://1cexpo.ru/images/stories/1c/3.png" width="478" /><br />
Сохраните созданный план. При наступлении указанного в расписании срока обновление статистик будет запущено автоматически.<br />
<h2><a href="http://www.blogger.com/" name="P2" title="P2"></a>Очистка процедурного КЭШа</h2>Оптимизатор MS SQL Server кэширует планы запросов для их повторного выполнения. Это делается для того, чтобы экономить время, затрачиваемое на компиляцию запроса в том случае, если такой же запрос уже выполнялся и его план известен.<br />
Возможна ситуация, при которой MS SQL Server, ориентируясь на устаревшую статистическую информацию, построит неоптимальный план запроса. Этот план будет сохранен в процедурном КЭШе и использован при повторном вызове такого же запроса. Если Вы обновили статистику, но не очистили процедурный кэш, то SQL Server может выбрать старый (неоптимальный) план запроса из КЭШа вместо того, чтобы построить новый (более оптимальный) план.<br />
Таким образом, рекомендуется всегда после обновления статистик очищать содержимое процедурного КЭШа.<br />
Для очистки процедурного КЭШа MS SQL Server необходимо выполнить следующий SQL запрос:<br />
<pre>DBCC FREEPROCCACHE</pre>Этот запрос следует выполнять непосредственно после обновления статистики. Соответственно, частота его выполнения должна совпадать с частотой обновления статистики.<br />
<h3>Настройка очистки процедурного КЭШа (MS SQL 2005)</h3>Поскольку процедурный КЭШ необходимо очищать при каждом обновлении статистики, данную операцию рекомендуется добавить в уже созданный субплан «Обновление статистик». Для этого следует открыть субплан и добавить в его схему задачу Execute T-SQL Statement Task. Затем следует соединить задачу Update Statistics Task стрелочкой с новой задачей.<br />
<img alt=" " border="0" height="642" src="http://1cexpo.ru/images/stories/1c/4.png" width="711" /><br />
В тексте созданной задачи Execute T-SQL Statement Task следует указать запрос «DBCC FREEPROCCACHE»:<br />
<img alt=" " border="0" height="357" src="http://1cexpo.ru/images/stories/1c/5.png" width="478" /><br />
<h2><a href="http://www.blogger.com/" name="P3" title="P3"></a>Дефрагментация индексов</h2>При интенсивной работе с таблицами базы данных возникает эффект фрагментации индексов, который может привести к снижению эффективности работы запросов.<br />
Рекомендуется регулярное выполнение дефрагментации индексов. Для дефрагментации всех индексов всех таблиц базы данных необходимо использовать следующий SQL запрос (предварительно подставив имя базы):<br />
<pre>sp_msforeachtable N'DBCC INDEXDEFRAG (<имя базы данных>, ''?'')'</pre>Дефрагментация индексов не блокирует таблицы, и не будет мешать работе других пользователей, однако создает дополнительную нагрузку на SQL Server. Оптимальная частота выполнения данной регламентной процедуры должна подбираться в соответствии с нагрузкой на систему и эффектом, получаемым от дефрагментации. Рекомендуется выполнять дефрагментацию индексов не реже одного раза в день.<br />
Возможно выполнение дефрагментации для одной или нескольких таблиц, а не для всех таблиц базы данных.<br />
Настройка дефрагментации индексов (MS SQL 2005)<br />
В ранее созданном плане обслуживания создайте новый субплан с именем «Дефрагментация индексов». Добавьте в него задачу Reorganize Index Task:<br />
<img alt=" " border="0" height="642" src="http://1cexpo.ru/images/stories/1c/6.png" width="711" /><br />
Задайте расписание выполнения для задачи дефрагментации индексов. Рекомендуется выполнять задачу не реже одного раза в неделю, а при высокой изменчивости данных в базе еще чаще – до одного раза в день.<br />
Настройте задачу, указав базу данных (или несколько баз данных) и выбрав необходимые таблицы. Если точно неизвестно, какие таблицы следует указать, то устанавливайте значение All.<br />
<img alt=" " border="0" height="229" src="http://1cexpo.ru/images/stories/1c/7.png" width="478" /><br />
<h2><a href="http://www.blogger.com/" name="P4" title="P4"></a>Реиндексация таблиц базы данных</h2>Реиндексация таблиц включает полное перестроение индексов таблиц базы данных, что приводит к существенной оптимизации их работы. Рекомендуется выполнять регулярную переиндексацию таблиц базы данных. Для реиндексации всех таблиц базы данных необходимо выполнить следующий SQL запрос:<br />
<pre>sp_msforeachtable N'DBCC DBREINDEX (''?'')'</pre>Реиндексация таблиц блокирует их на все время своей работы, что может существенно сказаться на работе пользователей. В связи с этим реиндексацию рекомендуется выполнять во время минимальной загрузки системы.<br />
После выполнения реиндексации нет необходимости делать дефрагментацию индексов.<br />
<h2><a href="http://www.blogger.com/" name="P4" title="P4"></a>Настройка реиндексации таблиц (MS SQL 2005)</h2>В ранее созданном плане обслуживания создайте новый субплан с именем «Дефрагментация индексов». Добавьте в него задачу Rebuild Index Task:<br />
<img alt=" " border="0" height="642" src="http://1cexpo.ru/images/stories/1c/8.png" width="711" /><br />
Задайте расписание выполнения для задачи реиндексирования таблиц. Рекомендуется выполнять задачу во время минимальной нагрузки на систему, не реже одного раза в неделю.<br />
Настройте задачу, указав базу данных (или несколько баз данных) и выбрав необходимые таблицы. Если точно неизвестно, какие таблицы следует указать, то устанавливайте значение All.<br />
<img alt=" " border="0" height="449" src="http://1cexpo.ru/images/stories/1c/9.png" width="478" /><br />
<h2><a href="http://www.blogger.com/" name="Control" title="Control"></a>Контроль выполнения регламентных процедур на уровне СУБД</h2>Необходимо осуществлять регулярный контроль выполнения регламентных процедур на уровне СУБД. Ниже приведен пример контроля выполнения плана обслуживания для MS SQL Server 2005.<br />
Откройте созданный вами план обслуживания и выберите из контекстного меню пункт «View History»:<br />
<img alt=" " border="0" height="642" src="http://1cexpo.ru/images/stories/1c/10.png" width="711" /><br />
Откроется окно с протоколом выполнения всех заданных регламентных процедур.<br />
<img alt=" " border="0" height="596" src="http://1cexpo.ru/images/stories/1c/11.png" width="648" /><br />
Успешно выполненные задачи и задачи, выполненные с ошибками, будут помечены соответствующими иконками. Для задач, выполненных с ошибками, доступна подробная информация об ошибке.<br />
<br />
Взято <a href="http://1cexpo.ru/instrukczii/22-reglamentnye-operaczii-na-urovne-subd-dlya-ms-sql-server.html#P4">отсюда</a></div>dedMazDiehttp://www.blogger.com/profile/18195725128796745204noreply@blogger.com0tag:blogger.com,1999:blog-2402315195124580440.post-40297763684521687032011-03-11T14:49:00.002+05:002011-06-20T19:37:17.297+06:00Полезные SQL запросы<div dir="ltr" style="text-align: left;" trbidi="on"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;">Приведу тут пару приемов, которые в свое время помогли мне решить некие локальные задачи. На авторство не претендую, но все же…</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;">Итак, имеется таблица в БД (таблица 1).</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;"><b style="mso-bidi-font-weight: normal;">Таблица 1</b> – Данные по расположению книг</div><br />
<table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-bottom: medium none; border-collapse: collapse; border-left: medium none; border-right: medium none; border-top: medium none; margin: auto auto auto 23.4pt; mso-border-alt: solid windowtext .5pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 480;"><tbody>
<tr style="mso-yfti-firstrow: yes; mso-yfti-irow: 0;"><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;"><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Stand</span></b></div></td><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;"><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Author</span></b></div></td></tr>
<tr style="mso-yfti-irow: 1;"><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: #d4d0c8; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;">Стенд 1</div></td><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: #d4d0c8; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;">Толстой</div></td></tr>
<tr style="mso-yfti-irow: 2;"><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: #d4d0c8; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;">Стенд 1</div></td><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: #d4d0c8; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;">Пушкин</div></td></tr>
<tr style="mso-yfti-irow: 3;"><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: #d4d0c8; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;">Стенд 1</div></td><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: #d4d0c8; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;">Чехов</div></td></tr>
<tr style="mso-yfti-irow: 4;"><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: #d4d0c8; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;">Стенд 1</div></td><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: #d4d0c8; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;">Гоголь</div></td></tr>
<tr style="mso-yfti-irow: 5;"><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: #d4d0c8; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;">Стенд 2</div></td><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: #d4d0c8; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;">Лондон</div></td></tr>
<tr style="mso-yfti-irow: 6;"><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: #d4d0c8; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;">Стенд 2</div></td><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: #d4d0c8; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;">Брэдбери</div></td></tr>
<tr style="mso-yfti-irow: 7; mso-yfti-lastrow: yes;"><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: #d4d0c8; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;">Стенд 2</div></td><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: #d4d0c8; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;">Верн</div></td></tr>
</tbody></table><br />
<div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;">А нужно получить данные как в таблице 2.</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;"><b style="mso-bidi-font-weight: normal;">Таблица 2</b> – Требуемые данные</div><br />
<table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-bottom: medium none; border-collapse: collapse; border-left: medium none; border-right: medium none; border-top: medium none; margin: auto auto auto 23.4pt; mso-border-alt: solid windowtext .5pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 480;"><tbody>
<tr style="mso-yfti-firstrow: yes; mso-yfti-irow: 0;"><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;"><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Stand</span></b></div></td><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;"><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="mso-ansi-language: EN-US;">Authors</span></b></div></td></tr>
<tr style="mso-yfti-irow: 1;"><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: #d4d0c8; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;">Стенд 1</div></td><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: #d4d0c8; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;">Толстой Пушкин Чехов Гоголь</div></td></tr>
<tr style="mso-yfti-irow: 2; mso-yfti-lastrow: yes;"><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: #d4d0c8; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;">Стенд 2</div></td><td style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: #d4d0c8; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm;" valign="top"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;">Лондон Брэдбери Верн</div></td></tr>
</tbody></table><br />
<div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;">Сделать это можно, используя средства извлечения XML-данных, а именно новый для SQL Server 2005 режим <i style="mso-bidi-font-style: normal;">FOR XML PATH</i>. Т.е. для каждой сущности <i style="mso-bidi-font-style: normal;">Stand</i> «склеиваются» сущности <i style="mso-bidi-font-style: normal;">Author</i> при помощи XML. Запрос приведен в листинге 1.</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;"><b style="mso-bidi-font-weight: normal;">Листинг 1</b> – «Склеивание» при помощи <i style="mso-bidi-font-style: normal;">FOR XML PATH</i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt 17.85pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 10pt; line-height: 150%;">SELECT</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; line-height: 150%;"> </span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt 17.85pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span>l<span style="color: grey;">.</span>Stand<span style="color: grey;">,</span></span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt 17.85pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="color: magenta;">CAST</span><span style="color: grey;">(</span></span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt 17.85pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="color: grey;">(</span></span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt 17.85pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">SELECT</span> l2<span style="color: grey;">.</span>Author <span style="color: blue;">AS</span> <span style="color: red;">'data()'</span> </span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt 17.85pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">FROM</span> dbo<span style="color: grey;">.</span>t_Library l2</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt 17.85pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">WHERE</span> l2<span style="color: grey;">.</span>Stand <span style="color: grey;">=</span> l<span style="color: grey;">.</span>Stand</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt 17.85pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">GROUP</span> <span style="color: blue;">BY</span> l2<span style="color: grey;">.</span>Author</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt 17.85pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">FOR</span> <span style="color: blue;">XML</span> <span style="color: blue;">PATH</span><span style="color: grey;">(</span><span style="color: red;">''</span><span style="color: grey;">)</span></span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt 17.85pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="color: grey;">)</span> <span style="color: blue;">AS</span> <span style="color: blue;">varchar</span><span style="color: grey;">(</span>128<span style="color: grey;">))</span> <span style="color: blue;">AS</span> Authors</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt 17.85pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 10pt; line-height: 150%;">FROM</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; line-height: 150%;"> dbo<span style="color: grey;">.</span>t_Library l</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt 17.85pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 10pt; line-height: 150%;">GROUP</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; line-height: 150%;"> <span style="color: blue;">BY</span> </span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt 17.85pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span>l<span style="color: grey;">.</span>Stand</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 10pt; line-height: 150%;">ORDER</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; line-height: 150%;"> <span style="color: blue;">BY</span> l<span style="color: grey;">.</span>Stand</span><span lang="EN-US" style="mso-ansi-language: EN-US;"></span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;">Следующий пример. Допустим, у нас есть данные по возврату книг (таблица 3).</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;"><b style="mso-bidi-font-weight: normal;">Таблица 3</b> – Возвраты книг</div><br />
<table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse; margin: auto auto auto 23.4pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; width: 181px;"><tbody>
<tr style="height: 15pt; mso-yfti-firstrow: yes; mso-yfti-irow: 0;"><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: windowtext 1pt solid; height: 15pt; mso-border-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 2cm;" valign="bottom" width="76"><div class="MsoNormal" style="margin: 0cm 0cm 0pt;"><b style="mso-bidi-font-weight: normal;">Author</b></div></td><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: windowtext 1pt solid; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 78.85pt;" valign="bottom" width="105"><div class="MsoNormal" style="margin: 0cm 0cm 0pt;"><b style="mso-bidi-font-weight: normal;">Return_Date</b></div></td></tr>
<tr style="height: 15pt; mso-yfti-irow: 1;"><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: #d4d0c8; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 2cm;" valign="bottom" width="76"><div class="MsoNormal" style="margin: 0cm 0cm 0pt;">Толстой</div></td><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: #d4d0c8; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 78.85pt;" valign="bottom" width="105"><div align="right" class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: right;">02.03.2011</div></td></tr>
<tr style="height: 15pt; mso-yfti-irow: 2;"><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: #d4d0c8; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 2cm;" valign="bottom" width="76"><div class="MsoNormal" style="margin: 0cm 0cm 0pt;">Толстой</div></td><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: #d4d0c8; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 78.85pt;" valign="bottom" width="105"><div align="right" class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: right;">04.03.2011</div></td></tr>
<tr style="height: 15pt; mso-yfti-irow: 3;"><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: #d4d0c8; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 2cm;" valign="bottom" width="76"><div class="MsoNormal" style="margin: 0cm 0cm 0pt;">Толстой</div></td><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: #d4d0c8; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 78.85pt;" valign="bottom" width="105"><div align="right" class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: right;">10.03.2011</div></td></tr>
<tr style="height: 15pt; mso-yfti-irow: 4;"><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: #d4d0c8; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 2cm;" valign="bottom" width="76"><div class="MsoNormal" style="margin: 0cm 0cm 0pt;">Чехов</div></td><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: #d4d0c8; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 78.85pt;" valign="bottom" width="105"><div align="right" class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: right;">01.03.2011</div></td></tr>
<tr style="height: 15pt; mso-yfti-irow: 5;"><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: #d4d0c8; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 2cm;" valign="bottom" width="76"><div class="MsoNormal" style="margin: 0cm 0cm 0pt;">Чехов</div></td><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: #d4d0c8; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 78.85pt;" valign="bottom" width="105"><div align="right" class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: right;">09.03.2011</div></td></tr>
<tr style="height: 15pt; mso-yfti-irow: 6;"><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: #d4d0c8; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 2cm;" valign="bottom" width="76"><div class="MsoNormal" style="margin: 0cm 0cm 0pt;">Лондон</div></td><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: #d4d0c8; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 78.85pt;" valign="bottom" width="105"><div align="right" class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: right;">31.01.2011</div></td></tr>
<tr style="height: 15pt; mso-yfti-irow: 7; mso-yfti-lastrow: yes;"><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: #d4d0c8; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 2cm;" valign="bottom" width="76"><div class="MsoNormal" style="margin: 0cm 0cm 0pt;">Лондон</div></td><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: #d4d0c8; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 78.85pt;" valign="bottom" width="105"><div align="right" class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: right;">01.03.2011</div></td></tr>
</tbody></table><br />
<div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;">Нужно получить выборку с книгами и их последними датами возврата таблица 4).</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;"><b style="mso-bidi-font-weight: normal;">Таблица 4</b> – Последние возвраты книг</div><br />
<table border="0" cellpadding="0" cellspacing="0" class="MsoNormalTable" style="border-collapse: collapse; margin: auto auto auto 23.4pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; width: 181px;"><tbody>
<tr style="height: 15pt; mso-yfti-firstrow: yes; mso-yfti-irow: 0;"><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: windowtext 1pt solid; height: 15pt; mso-border-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 2cm;" valign="bottom" width="76"><div class="MsoNormal" style="margin: 0cm 0cm 0pt;"><b style="mso-bidi-font-weight: normal;">Author</b></div></td><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: windowtext 1pt solid; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 78.85pt;" valign="bottom" width="105"><div class="MsoNormal" style="margin: 0cm 0cm 0pt;"><b style="mso-bidi-font-weight: normal;">Return_Date</b></div></td></tr>
<tr style="height: 15pt; mso-yfti-irow: 1;"><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: #d4d0c8; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 2cm;" valign="bottom" width="76"><div class="MsoNormal" style="margin: 0cm 0cm 0pt;">Лондон</div></td><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: #d4d0c8; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 78.85pt;" valign="bottom" width="105"><div align="right" class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: right;">01.03.2011</div></td></tr>
<tr style="height: 15pt; mso-yfti-irow: 2;"><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: #d4d0c8; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 2cm;" valign="bottom" width="76"><div class="MsoNormal" style="margin: 0cm 0cm 0pt;">Толстой</div></td><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: #d4d0c8; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 78.85pt;" valign="bottom" width="105"><div align="right" class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: right;">10.03.2011</div></td></tr>
<tr style="height: 15pt; mso-yfti-irow: 3; mso-yfti-lastrow: yes;"><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; border-right: windowtext 1pt solid; border-top: #d4d0c8; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 2cm;" valign="bottom" width="76"><div class="MsoNormal" style="margin: 0cm 0cm 0pt;">Чехов</div></td><td nowrap="nowrap" style="background-color: transparent; border-bottom: windowtext 1pt solid; border-left: #d4d0c8; border-right: windowtext 1pt solid; border-top: #d4d0c8; height: 15pt; mso-border-bottom-alt: solid windowtext .5pt; mso-border-right-alt: solid windowtext .5pt; padding-bottom: 0cm; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0cm; width: 78.85pt;" valign="bottom" width="105"><div align="right" class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: right;">09.03.2011</div></td></tr>
</tbody></table><br />
<div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;">Сделать это можно при помощи запроса из листинга 2.</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 17.85pt;"><b style="mso-bidi-font-weight: normal;">Листинг 2</b> – Получение данных с последними обновлениями</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 10pt; line-height: 150%;">SELECT</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; line-height: 150%;"> <span style="color: blue;">TOP</span> 1 <span style="color: blue;">WITH</span> <span style="color: blue;">TIES</span> </span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span>b<span style="color: grey;">.</span>Author<span style="color: grey;">,</span> b<span style="color: grey;">.</span>Return_Date</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span style="color: blue; font-family: "Courier New"; font-size: 10pt; line-height: 150%;">FROM</span><span style="font-family: "Courier New"; font-size: 10pt; line-height: 150%;"> t_Books b</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 18pt;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 10pt; line-height: 150%;">ORDER</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; line-height: 150%;"> <span style="color: blue;">BY</span> ROW_NUMBER<span style="color: grey;">()</span> </span><span style="font-family: "Courier New"; font-size: 10pt; line-height: 150%;"></span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 18pt;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 10pt; line-height: 150%;">OVER</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; line-height: 150%;"> <span style="color: grey;">(</span><span style="color: blue;">PARTITION</span> <span style="color: blue;">BY</span> b<span style="color: grey;">.</span>Author <span style="color: blue;">ORDER</span> <span style="color: blue;">BY</span> b<span style="color: grey;">.</span>Return_Date <span style="color: blue;">DESC</span><span style="color: grey;">)</span><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="mso-ansi-language: EN-US;"></span></div></div>dedMazDiehttp://www.blogger.com/profile/18195725128796745204noreply@blogger.com0tag:blogger.com,1999:blog-2402315195124580440.post-55352663984502635122011-02-28T15:27:00.003+05:002011-06-20T19:37:53.845+06:00Как подружить Yandex Maps и SQL Server посредством YMapsML<div dir="ltr" style="text-align: left;" trbidi="on"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;">В <a href="http://dedmazdie.blogspot.com/2011/02/blog-post_24.html">прошлой</a> статье мы рассматривали организацию отображения на карте Яндекс.Карты объектов из БД MS SQL Server при помощи http-обработчика, написанного на ASP.Net (<span lang="EN-US" style="mso-ansi-language: EN-US;">C</span>#). Однако, это решение не является единственным (кто бы мог подумать <span style="font-family: "Wingdings";"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings;">J</span></span> ). В API Яндекс.Карты <a href="http://api.yandex.ru/maps/ymapsml/doc/ref/concepts/overview.xml">существует</a> возможность загрузки объектов посредством специального файла в XML формате. Объекты в этом файле описываются специальным YMap<span lang="EN-US" style="mso-ansi-language: EN-US;">s</span>ML языком. В общем виде такой файл имеет вид как на листинге 1.</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 1</b> – Пример YMapsML – файла</div><pre><span class="pi"><span style="color: #0099cc; font-family: "Courier"; font-size: 9pt;"><?xml version="1.0" encoding="utf-8"?></span></span><code><span style="color: #0099cc; font-family: "Courier"; font-size: 9pt;"></span></code></pre><pre><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">ymaps:ymaps</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"> </span></span><span class="attribute"><span lang="EN-US" style="color: red; font-family: "Courier"; font-size: 9pt;">xmlns:ymaps</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">=</span></span><span class="value"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">"http://maps.yandex.ru/ymaps/1.x"</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></span></pre><pre><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></span><span class="attribute"><span lang="EN-US" style="color: red; font-family: "Courier"; font-size: 9pt;">xmlns:gml</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">=</span></span><span class="value"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">"http://www.opengis.net/gml"</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></span></pre><pre><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></span><span class="attribute"><span lang="EN-US" style="color: red; font-family: "Courier"; font-size: 9pt;">xmlns:repr</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">=</span></span><span class="value"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">"http://maps.yandex.ru/representation/1.x"</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></span></pre><pre><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></span><span class="attribute"><span lang="EN-US" style="color: red; font-family: "Courier"; font-size: 9pt;">xmlns:xsi</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">=</span></span><span class="value"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">"http://www.w3.org/2001/XMLSchema-instance"</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></span></pre><pre><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></span><span class="attribute"><span lang="EN-US" style="color: red; font-family: "Courier"; font-size: 9pt;">xsi:schemaLocation</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">=</span></span><span class="value"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">"http://maps.yandex.ru/schemas/ymaps/1.x/ymaps.xsd"</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></code></pre><pre><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">ymaps:GeoObjectCollection</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></code></pre><pre><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">ymaps:style</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">#</span></code><code><span lang="EN-US" style="color: blue; font-family: "Times New Roman"; font-size: 9pt;">any</span></code><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">Style</span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">ymaps:style</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></code></pre><pre><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">gml:featureMembers</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></code></pre><pre><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">ymaps:GeoObject</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></code></pre><pre><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">gml:description</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span style="font-family: "Courier"; font-size: 9pt;">Описание</span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">gml:description</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></code></pre><pre><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">gml:Point</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></code></pre><pre><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">gml:pos</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="font-family: "Courier"; font-size: 9pt;">37.63 55.75</span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">gml:pos</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></code></pre><pre><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">gml:Point</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></code></pre><pre><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">ymaps:GeoObject</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></code></pre><pre><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></code></pre><pre><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">ymaps:GeoObject</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></code></pre><pre><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">gml:LineString</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></code></pre><pre><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span></span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">gml:pos</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="font-family: "Courier"; font-size: 9pt;">70 55</span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">gml:pos</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></code></pre><pre><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">gml:pos</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="font-family: "Courier"; font-size: 9pt;">80 70</span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">gml:pos</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></code></pre><pre><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">gml:pos</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="font-family: "Courier"; font-size: 9pt;">120 30</span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">gml:pos</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></code></pre><pre><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">gml:LineString</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></code></pre><pre><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">ymaps:GeoObject</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></code></pre><pre><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></code><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></</span></span><span class="title"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">gml:featureMembers</span></span><span class="tag"><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></code></pre><pre><code><span lang="EN-US" style="color: blue; font-family: "Courier"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></code><span class="tag"><span style="color: blue; font-family: "Courier"; font-size: 9pt;"></</span></span><span class="title"><span style="color: blue; font-family: "Courier"; font-size: 9pt;">ymaps:GeoObjectCollection</span></span><span class="tag"><span style="color: blue; font-family: "Courier"; font-size: 9pt;">></span></span><code><span style="color: blue; font-family: "Courier"; font-size: 9pt;"></span></code></pre><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><span class="tag"><span style="color: blue; font-family: "Courier"; font-size: 9pt; line-height: 150%;"></</span></span><span class="title"><span style="color: blue; font-family: "Courier"; font-size: 9pt; line-height: 150%;">ymaps:ymaps</span></span><span class="tag"><span style="color: blue; font-family: "Courier"; font-size: 9pt; line-height: 150%;">></span></span><span style="color: blue; font-family: "Courier"; font-size: 9pt; line-height: 150%;"></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><span style="font-family: "Times New Roman"; line-height: 150%;">Итак, получим из таблицы (листинг 2) </span></code><code><span lang="EN-US" style="font-family: "Times New Roman"; line-height: 150%;">YMapsML</span></code><code><span style="font-family: "Times New Roman"; line-height: 150%;"> – файл, который загрузим на нашу страницу.</span></code></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: justify; text-indent: 27pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;">Листинг 2</b> – Таблица с объектами</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><span style="color: blue; font-size: 9pt; line-height: 150%;">CREATE TABLE</span></i></b><i style="mso-bidi-font-style: normal;"><span style="font-size: 9pt; line-height: 150%;"> [dbo].[t_Map] (</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><i style="mso-bidi-font-style: normal;"><span style="font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span></span></i><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 9pt; line-height: 150%; mso-ansi-language: EN-US;">[id] <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">int IDENTITY</span></b>(<span style="color: #ffcc99;">1, 1</span>) <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NOT NULL</span></b>,</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 9pt; line-height: 150%; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>[ObjectName_Var] nvarchar(<span style="color: #ffcc99;">128</span>) <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">COLLATE</span></b> Cyrillic_General_CI_AS <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>,</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 9pt; line-height: 150%; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>[Address_Var] nvarchar(<span style="color: #ffcc99;">256</span>) <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">COLLATE</span></b> Cyrillic_General_CI_AS <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>,</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 9pt; line-height: 150%; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>[Longitude_Var] nvarchar(<span style="color: #ffcc99;">128</span>) <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">COLLATE</span></b> Cyrillic_General_CI_AS <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>,</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 9pt; line-height: 150%; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>[Latitude_Var] nvarchar(<span style="color: #ffcc99;">1</span>) <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">COLLATE</span></b> Cyrillic_General_CI_AS <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>,</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 9pt; line-height: 150%; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span></span></i><b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><span style="color: blue; font-size: 9pt; line-height: 150%;">PRIMARY KEY CLUSTERED</span></i></b><i style="mso-bidi-font-style: normal;"><span style="font-size: 9pt; line-height: 150%;"> ([id])</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><i style="mso-bidi-font-style: normal;"><span style="font-size: 9pt; line-height: 150%;">)</span></i><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 9pt; line-height: 150%; mso-ansi-language: EN-US;"></span></i></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; text-align: justify; text-indent: 27pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><span style="font-family: "Times New Roman"; line-height: 150%;">Как видно из листинга 1, файл YMapsML представляет собой довольно сложную иерархическую структуру. Поэтому для преобразования наших реляционных данных (листинг 2) воспользуемся режимом форматирования <i style="mso-bidi-font-style: normal;">FOR XML EXPLICIT</i>.</span></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><span style="font-family: "Times New Roman"; line-height: 150%;">Запрос приведен в листинге 3, я не буду подробно его разбирать, там все довольно понятно, хотя и весьма громоздко.</span></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><b style="mso-bidi-font-weight: normal;"><span style="font-family: "Times New Roman"; line-height: 150%;">Листинг 3</span></b></code><code><span style="font-family: "Times New Roman"; line-height: 150%;"> – Получение </span></code><code><span lang="EN-US" style="font-family: "Times New Roman"; line-height: 150%;">XML</span></code><code><span lang="EN-US" style="font-family: "Times New Roman"; line-height: 150%;"> </span></code><code><span style="font-family: "Times New Roman"; line-height: 150%;">из реляционных данных</span></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="color: blue; font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;">CREATE</span></i></b></code><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"> <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">PROCEDURE</span></b> dbo.p_Get_XML</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="color: blue; font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;">AS</span></i></b></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="color: blue; font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;">SET</span></i></b></code><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"> NOCOUNT <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">ON</span></b></span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="color: blue; font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;">BEGIN</span></i></b></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">SELECT</span></b></span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="color: #ff6600;">1</span> Tag</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b> Parent</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b> [ymaps:ymaps!1]</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="color: silver;">, 'http://maps.yandex.ru/ymaps/1.x' </span>[ymaps:ymaps!<span style="color: #ff6600;">1</span>!xmlns:ymaps]</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span>, <span style="color: silver;">'http://maps.yandex.ru/representation/1.x' </span>[ymaps:ymaps!<span style="color: #ff6600;">1</span>!xmlns:repr]</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="color: silver;">, 'http://www.opengis.net/gml'</span> [ymaps:ymaps!<span style="color: #ff6600;">1</span>!xmlns:gml]</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span>, <span style="color: silver;">'http://www.w3.org/2001/XMLSchema-instance' </span>[ymaps:ymaps!<span style="color: #ff6600;">1</span>!xmlns:xsi]</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span>, <span style="color: silver;">'http://maps.yandex.ru/schemas/ymaps/1.x/ymaps.xsd'</span> [ymaps:ymaps!<span style="color: #ff6600;">1</span>!xsi:schemaLocation]</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b> [repr:Representation!<span style="color: #ff6600;">2</span>]</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b> [repr:View!<span style="color: #ff6600;">3</span>]</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b> [repr:mapType!<span style="color: #ff6600;">4</span>]</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b> [ymaps:GeoObjectCollection!<span style="color: #ff6600;">5</span>]</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b> [ymaps:style!<span style="color: #ff6600;">6</span>]</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b> [gml:featureMembers!<span style="color: #ff6600;">7</span>]</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b> [ymaps:GeoObject!<span style="color: #ff6600;">8</span>]</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b> [gml:name!<span style="color: #ff6600;">9</span>]</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b> [gml:description!<span style="color: #ff6600;">10</span>]</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b> [gml:Point!<span style="color: #ff6600;">11</span>]</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b> [gml:pos!<span style="color: #ff6600;">12</span>]</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">UNION</span></b> <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">ALL</span></b></span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">SELECT</span></b> <span style="color: #ff6600;">2</span> Tag, <span style="color: #ff6600;">1</span> Parent, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <span style="color: #999999;">'MAP'</span>, </span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="mso-tab-count: 2;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <span style="color: silver;">'#customStyle'</span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b></span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">UNION</span></b> <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">ALL</span></b></span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">SELECT</span></b> <span style="color: #ff6600;">3 </span>Tag, <span style="color: #ff6600;">2</span> Parent, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <span style="color: #999999;">'MAP'</span>, </span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="mso-tab-count: 2;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, '<span style="color: silver;">#customStyle'</span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b></span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">UNION</span></b> <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">ALL</span></b></span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">SELECT</span></b> <span style="color: #ff6600;">4</span> Tag, <span style="color: #ff6600;">3</span> Parent, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <span style="color: #999999;">'MAP'</span>, </span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="mso-tab-count: 2;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <span style="color: silver;">'#customStyle'</span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b></span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">UNION</span></b> <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">ALL</span></b></span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">SELECT</span></b> <span style="color: #ff6600;">5</span> Tag, <span style="color: #ff6600;">1</span> Parent, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <span style="color: #999999;">'MAP'</span>, </span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="mso-tab-count: 2;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <span style="color: silver;">'#customStyle'</span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b></span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">UNION</span></b> <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">ALL</span></b></span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">SELECT</span></b> <span style="color: #ff6600;">6 </span>Tag, <span style="color: #ff6600;">5</span> Parent, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <span style="color: #999999;">'MAP'</span>, </span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="mso-tab-count: 2;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <span style="color: silver;">'#customStyle'</span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b></span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">UNION</span></b> <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">ALL</span></b></span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">SELECT</span></b> <span style="color: #ff6600;">7</span> Tag, <span style="color: #ff6600;">5</span> Parent, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <span style="color: #999999;">'MAP'</span>, </span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="mso-tab-count: 2;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <span style="color: silver;">'#customStyle'</span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b></span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">UNION</span></b> <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">ALL</span></b></span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">SELECT</span></b> <span style="color: #ff6600;">8</span> Tag, <span style="color: #ff6600;">7</span> Parent, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <span style="color: silver;">'MAP'</span>, </span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="mso-tab-count: 2;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <span style="color: silver;">'#customStyle'</span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL,</span></b> <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, m.ObjectName_Var, m.Address_Var, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b> FROM t_Map m</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">UNION</span></b> <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">ALL</span></b></span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">SELECT</span></b> <span style="color: #ff6600;">9</span> Tag, <span style="color: #ff6600;">8</span> Parent, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b><span style="color: silver;">, 'MAP'</span>, </span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="mso-tab-count: 2;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b><span style="color: silver;">, '#customStyle'</span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, m.ObjectName_Var, m.Address_Var, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b> <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">FROM</span></b> t_Map m</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">UNION</span></b> <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">ALL</span></b></span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">SELECT</span></b> <span style="color: #ff6600;">10</span> Tag<span style="color: #ff6600;">, 8</span> Parent, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <span style="color: silver;">'MAP'</span>, </span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="mso-tab-count: 2;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <span style="color: silver;">'#customStyle'</span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, m.ObjectName_Var, m.Address_Var, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b> <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">FROM</span></b> t_Map m</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">UNION</span></b> <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">ALL</span></b></span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">SELECT</span></b> <span style="color: #ff6600;">11</span> Tag, <span style="color: #ff6600;">8</span> Parent, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b><span style="color: silver;">, 'MAP'</span>, <span style="color: #999999;"></span></span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="mso-tab-count: 1;"> </span><span style="mso-tab-count: 1;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <span style="color: silver;">'#customStyle'</span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, m.ObjectName_Var, m.Address_Var, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b> <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">FROM</span></b> t_Map m</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">UNION</span></b> <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">ALL</span></b></span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">SELECT</span></b> <span style="color: #ff6600;">12</span> Tag, <span style="color: #ff6600;">11</span> Parent, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, '<span style="color: silver;">MAP'</span>, </span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="mso-tab-count: 2;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>,<span style="color: silver;"> '#customStyle'</span>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, m.ObjectName_Var, m.Address_Var, <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>, m.Longitude_Var + ' ' + m.Latitude_Var</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">FROM</span></b> dbo.t_Map m</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">ORDER</span></b> <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">BY</span></b> [ymaps:style!<span style="color: #ff6600;">6</span>], [gml:description!<span style="color: #ff6600;">10</span>], Tag</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">FOR</span></b> <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">XML</span></b> explicit</span></i></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="color: blue; font-family: "Times New Roman"; font-size: 9pt; line-height: 150%;">END</span></i></b></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><span style="font-family: "Times New Roman"; line-height: 150%;">Как было сказано, запрос громоздкий, но один раз стоит потратить время. Я не стал подробно расписывать раздел </span></code><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; line-height: 150%;">repr</span></i></code><code><i style="mso-bidi-font-style: normal;"><span style="font-family: "Times New Roman"; line-height: 150%;">:</span></i></code><code><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-family: "Times New Roman"; line-height: 150%;">Representation</span></i></code><code><i style="mso-bidi-font-style: normal;"><span style="font-family: "Times New Roman"; line-height: 150%;">, </span></i></code><code><span style="font-family: "Times New Roman"; line-height: 150%;">для нас сейчас не это главное.</span></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><span style="font-family: "Times New Roman"; line-height: 150%;">Теперь надо сделать, чтоб результат данного запроса сохранялся в файл *.xml. Скрипт, который делает это, приведен в листинге 4.</span></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><code><span style="font-family: "Times New Roman"; line-height: 150%;"></span></code><br />
<div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><span style="font-size: 10pt; line-height: 150%;"><b>Листинг 4</b></span></code><code><span style="font-size: 10pt; line-height: 150%;"> – Сохранение XML в файл</span></code></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 26.95pt;"><i><span lang="EN-US" style="color: blue; font-size: 9pt;"><b>DECLARE</b></span><span lang="EN-US" style="font-size: 9pt; mso-ansi-language: EN-US; mso-no-proof: yes;"> @result <span style="color: blue;">int</span></span></i></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 26.95pt;"><i><span lang="EN-US" style="color: blue; font-size: 9pt;"><b>DECLARE</b></span><span lang="EN-US" style="font-size: 9pt; mso-ansi-language: EN-US; mso-no-proof: yes;"> @OutputFileName <span style="color: blue;">varchar</span><span style="color: grey;">(</span>150<span style="color: grey;">)</span></span></i></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 26.95pt;"><i><span lang="EN-US" style="color: blue; font-size: 9pt;"><b>DECLARE</b></span><span lang="EN-US" style="font-size: 9pt; mso-ansi-language: EN-US; mso-no-proof: yes;"> @cmd <span style="color: blue;">varchar</span><span style="color: grey;">(</span> 150<span style="color: grey;">)</span></span></i></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 26.95pt;"><i><span lang="EN-US" style="color: blue; font-size: 9pt;"><b>SET</b></span><span lang="EN-US" style="font-size: 9pt; mso-ansi-language: EN-US; mso-no-proof: yes;"> @OutputFileName <span style="color: grey;">=</span> <span style="color: red;">'c:\YMapsML.xml'</span></span></i></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 26.95pt;"><i><span lang="EN-US" style="color: blue; font-size: 9pt;"><b>SET</b></span><span lang="EN-US" style="font-size: 9pt; mso-ansi-language: EN-US; mso-no-proof: yes;"> @cmd <span style="color: grey;">=</span> <span style="color: red;">'BCP "EXEC Site..p_Get_XML" queryout "'</span> <span style="color: grey;">+</span> @OutputFileName <span style="color: grey;">+</span> <span style="color: red;">'" -w -C1251 -r -T'</span></span></i></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; text-indent: 26.95pt;"><i><span lang="EN-US" style="color: blue; font-size: 9pt;"><b>EXEC</b></span><span lang="EN-US" style="font-size: 9pt; mso-ansi-language: EN-US; mso-no-proof: yes;"> @result <span style="color: grey;">=</span> master<span style="color: grey;">..</span><span style="color: maroon;">xp_cmdshell</span> @cmd</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><span style="mso-no-proof: yes;">Не забыть проверить, чтоб у файла, куда произойдет выгрузка был открыт доступ и назначены права на редактирование.</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><span style="font-size: 10pt; line-height: 150%; mso-bidi-font-size: 9.0pt; mso-no-proof: yes;">Далее файл нужно выложить в интернете так, чтоб он был доступен парсеру Яндекс.Карты. В этом есть ограничение использования данного метода. Например, мой сайт находится в локальной сети, и парсер сюда зайти не может.</span></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><code><span style="font-size: 10pt; line-height: 150%; mso-bidi-font-size: 9.0pt; mso-no-proof: yes;">Ну и напоследок страничка с подключенным YMapsML (листинг 5).</span></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b><code><span style="font-size: 10pt; line-height: 150%; mso-bidi-font-size: 9.0pt; mso-no-proof: yes;">Листинг</span></code><code><span lang="EN-US" style="font-size: 10pt; line-height: 150%; mso-ansi-language: EN-US; mso-bidi-font-size: 9.0pt; mso-no-proof: yes;"> 5</span></code></b><code><span lang="EN-US" style="font-size: 10pt; line-height: 150%; mso-ansi-language: EN-US; mso-bidi-font-size: 9.0pt; mso-no-proof: yes;"> – </span></code><code><span style="font-size: 10pt; line-height: 150%; mso-bidi-font-size: 9.0pt; mso-no-proof: yes;">Подключение</span></code><code><span style="font-size: 10pt; line-height: 150%; mso-ansi-language: EN-US; mso-bidi-font-size: 9.0pt; mso-no-proof: yes;"> <span lang="EN-US">YMapsML</span></span></code></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;"><!</span><span lang="EN-US" style="color: #a31515; font-family: "Courier New"; font-size: 9pt;">DOCTYPE</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> <span style="color: red;">html</span> <span style="color: red;">PUBLIC</span> <span style="color: blue;">"-//W3C//DTD XHTML 1.0 Transitional//EN"</span> <span style="color: blue;">"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;"><</span><span lang="EN-US" style="color: #a31515; font-family: "Courier New"; font-size: 9pt;">html</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> <span style="color: red;">xmlns</span><span style="color: blue;">="http://www.w3.org/1999/xhtml"></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;"><</span><span lang="EN-US" style="color: #a31515; font-family: "Courier New"; font-size: 9pt;">head</span><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">title</span><span style="color: blue;">></span></span><span style="font-family: "Courier New"; font-size: 9pt;">Примеры</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;">. </span><span style="font-family: "Courier New"; font-size: 9pt;">Визуализация</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> YMapsML.<span style="color: blue;"></</span><span style="color: #a31515;">title</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">meta</span> <span style="color: red;">http-equiv</span><span style="color: blue;">="Content-Type"</span> <span style="color: red;">content</span><span style="color: blue;">="text/html; charset=utf-8"</span> <span style="color: blue;">/></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">script</span> <span style="color: red;">src</span><span style="color: blue;">="http://api-maps.yandex.ru/1.1/index.xml?key=ANpUFEkBAAAAf7jmJwMAHGZHrcKNDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ=="</span> <span style="color: red;">type</span><span style="color: blue;">="text/javascript"></</span><span style="color: #a31515;">script</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">script</span> <span style="color: red;">type</span><span style="color: blue;">="text/javascript"></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: green;">// </span></span><span style="color: green; font-family: "Courier New"; font-size: 9pt;">Создание</span><span style="color: green; font-family: "Courier New"; font-size: 9pt;"> </span><span style="color: green; font-family: "Courier New"; font-size: 9pt;">обработчика</span><span style="color: green; font-family: "Courier New"; font-size: 9pt;"> </span><span style="color: green; font-family: "Courier New"; font-size: 9pt;">для</span><span style="color: green; font-family: "Courier New"; font-size: 9pt;"> </span><span style="color: green; font-family: "Courier New"; font-size: 9pt;">события</span><span lang="EN-US" style="color: green; font-family: "Courier New"; font-size: 9pt;"> window.onLoad</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: "Courier New"; font-size: 9pt;">YMaps.jQuery(<span style="color: blue;">function</span> () {</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: green;">// Создание экземпляра карты и его привязка к созданному контейнеру</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">var</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> map = <span style="color: blue;">new</span> YMaps.Map(YMaps.jQuery(<span style="color: #a31515;">"#YMapsID"</span>)[0]);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span style="color: green; font-family: "Courier New"; font-size: 9pt;">// Установка для карты ее центра и масштаба</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;">map.setCenter(<span style="color: blue;">new</span> YMaps.GeoPoint(55.983161, 54.73794), 12);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span></span><span style="color: green; font-family: "Courier New"; font-size: 9pt;">// Создание YMapsML-документа и добавление его на карту</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">var</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> ml = <span style="color: blue;">new</span> YMaps.YMapsML(<span style="color: #a31515;">"http://download1317.mediafire.com/6v198lba6hdg/a4a6lovzelap5b9/1.xml"</span>);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: "Courier New"; font-size: 9pt;">map.addOverlay(ml);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: green;">// Обработчик неудачного создание документа YMapsML</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;">YMaps.Events.observe(ml, ml.Events.Fault, <span style="color: blue;">function</span> (ml, error) {</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>alert(<span style="color: #a31515;">"</span></span><span style="color: #a31515; font-family: "Courier New"; font-size: 9pt;">Ошибка</span><span lang="EN-US" style="color: #a31515; font-family: "Courier New"; font-size: 9pt;">: "</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> + error);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>});</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>});</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"></</span><span style="color: #a31515;">script</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;"></</span><span lang="EN-US" style="color: #a31515; font-family: "Courier New"; font-size: 9pt;">head</span><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;"><</span><span lang="EN-US" style="color: #a31515; font-family: "Courier New"; font-size: 9pt;">body</span><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">div</span> <span style="color: red;">id</span><span style="color: blue;">="YMapsID"</span> <span style="color: red;">style</span><span style="color: blue;">="</span><span style="color: red;">width</span>:<span style="color: blue;">600px</span>;<span style="color: red;">height</span>:<span style="color: blue;">400px"></</span><span style="color: #a31515;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><span style="color: blue; font-family: "Courier New"; font-size: 9pt;"></</span><span style="color: #a31515; font-family: "Courier New"; font-size: 9pt;">body</span><span style="color: blue; font-family: "Courier New"; font-size: 9pt;">></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 18pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 18pt;"><span style="color: blue; font-family: "Courier New"; font-size: 9pt; line-height: 150%;"></</span><span style="color: #a31515; font-family: "Courier New"; font-size: 9pt; line-height: 150%;">html</span><span style="color: blue; font-family: "Courier New"; font-size: 9pt; line-height: 150%;">></span><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt; line-height: 150%;"></span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 18pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 18pt;"><span lang="EN-US" style="mso-ansi-language: EN-US; mso-no-proof: yes;">Удачи!</span><code><span lang="EN-US" style="font-size: 10pt; line-height: 150%; mso-ansi-language: EN-US; mso-no-proof: yes;"></span></code></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"></div></div>dedMazDiehttp://www.blogger.com/profile/18195725128796745204noreply@blogger.com7tag:blogger.com,1999:blog-2402315195124580440.post-13353331278646558422011-02-24T16:13:00.008+05:002011-06-20T19:38:20.376+06:00Как подружить Yandex Maps и SQL Server используя http обработчик<div dir="ltr" style="text-align: left;" trbidi="on"><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;"><span style="line-height: 150%;">Постановка задачи.</span></b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="line-height: 150%; mso-ansi-language: EN-US;"></span></b></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><span style="line-height: 150%;">Необходимо создать сайт с картой, на которую нанесены объекты.</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><span style="line-height: 150%;">Объекты заданы таблицей в БД MS SQL Server (листинг 1). Данные объекты необходимо нанести на карту, используя модуль <a href="http://yandex.maps/">Yandex.Maps</a> от Yandex, т.к. объекты находятся там, где указанный модуль имеет лучшую детализацию, чем другие поставщики карт (например, google). При написании сайта должны использоваться технологии: html, CSS, js, ASP.Net (</span><span lang="EN-US" style="line-height: 150%; mso-ansi-language: EN-US;">C</span><span style="line-height: 150%;">#).</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;"><span style="line-height: 150%;">Листинг 1</span></b><span style="line-height: 150%;"> – Таблица с объектами</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><span style="color: blue; font-size: 10pt; line-height: 150%;">CREATE TABLE</span></i></b><i style="mso-bidi-font-style: normal;"><span style="font-size: 10pt; line-height: 150%;"> [dbo].[t_Map] (</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><i style="mso-bidi-font-style: normal;"><span style="font-size: 10pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span></span></i><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 10pt; line-height: 150%; mso-ansi-language: EN-US;">[id] <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">int IDENTITY</span></b>(<span style="color: #ffcc99;"><span style="color: #b45f06;">1, 1</span></span>) <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NOT NULL</span></b>,</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 10pt; line-height: 150%; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>[ObjectName_Var] nvarchar(<span style="color: #ffcc99;"><span style="color: #b45f06;">128</span></span>) <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">COLLATE</span></b> Cyrillic_General_CI_AS <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>,</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 10pt; line-height: 150%; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>[Address_Var] nvarchar(<span style="color: #ffcc99;"><span style="color: #b45f06;">256</span></span>) <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">COLLATE</span></b> Cyrillic_General_CI_AS <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>,</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 10pt; line-height: 150%; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>[Longitude_Var] nvarchar(<span style="color: #ffcc99;"><span style="color: #b45f06;">128</span></span>) <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">COLLATE</span></b> Cyrillic_General_CI_AS <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>,</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 10pt; line-height: 150%; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>[Latitude_Var] nvarchar(<span style="color: #ffcc99;"><span style="color: #b45f06;">1</span></span>) <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">COLLATE</span></b> Cyrillic_General_CI_AS <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">NULL</span></b>,</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 10pt; line-height: 150%; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span></span></i><b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><span style="color: blue; font-size: 10pt; line-height: 150%;">PRIMARY KEY CLUSTERED</span></i></b><i style="mso-bidi-font-style: normal;"><span style="font-size: 10pt; line-height: 150%;"> ([id])</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><i style="mso-bidi-font-style: normal;"><span style="font-size: 10pt; line-height: 150%;">)</span></i><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 10pt; line-height: 150%; mso-ansi-language: EN-US;"></span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;"><span style="line-height: 150%;">Решение.</span></b></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><span style="line-height: 150%;">Особенность данной задачи заключается в том, что API Яндекс.Карты написано на javascript (js), который является «клиентским» языком. В то же самое время мы должны получать данные с сервера из БД </span><span lang="EN-US" style="line-height: 150%; mso-ansi-language: EN-US;">MS</span><span lang="EN-US" style="line-height: 150%;"> </span><span lang="EN-US" style="line-height: 150%; mso-ansi-language: EN-US;">SQL Server</span><span style="line-height: 150%;"> посредством </span><span lang="EN-US" style="line-height: 150%; mso-ansi-language: EN-US;">ASP</span><span style="line-height: 150%;">.</span><span lang="EN-US" style="line-height: 150%; mso-ansi-language: EN-US;">Net</span><span style="line-height: 150%;">.</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><span style="line-height: 150%;">Очевидно, что тут должна помочь технология AJAX (<i style="mso-bidi-font-style: normal;"><u>A</u>synchronous <u>J</u>avascript <u>A</u>nd <u>X</u>ml</i> - технология для взаимодействия с сервером без перезагрузки страниц), а точнее фреймворк jQuery, который несколько упрощает написание кода.</span><span lang="EN-US" style="line-height: 150%; mso-ansi-language: EN-US;"></span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><span style="line-height: 150%;">На стороне сервера будет создан специальный обработчик http, к которому будет обращатся клиент для получения данных из БД.</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><span style="line-height: 150%;">Итак, начнем. Для начала, создадим заготовку страницы с картой, на которую будут нанесены наши объекты (листинг 2).</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;"><span style="line-height: 150%;">Листинг</span></b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="line-height: 150%; mso-ansi-language: EN-US;"> 2</span></b><span lang="EN-US" style="line-height: 150%; mso-ansi-language: EN-US;"> – </span><span style="line-height: 150%;">Заготовка</span><span style="line-height: 150%; mso-ansi-language: EN-US;"> </span><span style="line-height: 150%;">с</span><span style="line-height: 150%; mso-ansi-language: EN-US;"> </span><span style="line-height: 150%;">картой</span><span lang="EN-US" style="line-height: 150%; mso-ansi-language: EN-US;"></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="background-attachment: scroll; background-clip: border-box; background-color: yellow; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; font-family: "Courier New"; font-size: 9pt;"><%</span><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">@</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> <span style="color: #a31515;">Page</span> <span style="color: red;">Language</span><span style="color: blue;">="C#"</span> <span style="color: red;">AutoEventWireup</span><span style="color: blue;">="true"</span><span style="mso-spacerun: yes;"> </span><span style="color: red;">CodeFile</span><span style="color: blue;">="Default.aspx.cs"</span> <span style="color: red;">Inherits</span><span style="color: blue;">="_Default"</span> <span style="background: yellow; mso-highlight: yellow;">%></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;"><!</span><span lang="EN-US" style="color: #a31515; font-family: "Courier New"; font-size: 9pt;">DOCTYPE</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> <span style="color: red;">html</span> <span style="color: red;">PUBLIC</span> <span style="color: blue;">"-//W3C//DTD XHTML 1.0 Transitional//EN"</span> <span style="color: blue;">"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;"><</span><span lang="EN-US" style="color: #a31515; font-family: "Courier New"; font-size: 9pt;">html</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> <span style="color: red;">xmlns</span><span style="color: blue;">="http://www.w3.org/1999/xhtml"></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;"><</span><span lang="EN-US" style="color: #a31515; font-family: "Courier New"; font-size: 9pt;">head</span><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">title</span><span style="color: blue;">></span></span><span style="font-family: "Courier New"; font-size: 9pt;">Наша</span><span style="font-family: "Courier New"; font-size: 9pt;"> </span><span style="font-family: "Courier New"; font-size: 9pt;">карта</span><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;"></</span><span lang="EN-US" style="color: #a31515; font-family: "Courier New"; font-size: 9pt;">title</span><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">meta</span> <span style="color: red;">http-equiv</span><span style="color: blue;">="Content-Type"</span> <span style="color: red;">content</span><span style="color: blue;">="text/html; charset=utf-8"</span> <span style="color: blue;">/></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">script</span> <span style="color: red;">src</span><span style="color: blue;">="http://api-maps.yandex.ru/1.1/index.xml?key=ANpUFEkBAAAAf7jmJwMAHGZHrcKNDsbEqEVjEUtCmufxQMwAAAAAAAAAAAAvVrubVT4btztbduoIgTLAeFILaQ=="</span> <span style="color: red;">type</span><span style="color: blue;">="text/javascript"></</span><span style="color: #a31515;">script</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">script</span> <span style="color: red;">type</span><span style="color: blue;">="text/javascript"</span> <span style="color: red;">src</span><span style="color: blue;">="http://js.static.yandex.net/jquery/1.3.2/_jquery.js"></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"></</span><span style="color: #a31515;">script</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">script</span> <span style="color: red;">type</span><span style="color: blue;">="text/javascript"></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span style="color: green; font-family: "Courier New"; font-size: 9pt;">// Создание обработчика для события window.onLoad</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>YMaps.jQuery(<span style="color: blue;">function</span> () {</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: green;">// Создание экземпляра карты и его привязка к созданному контейнеру</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">var</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> map = <span style="color: blue;">new</span> YMaps.Map(YMaps.jQuery(<span style="color: #a31515;">"#YMapsID"</span>)[0]);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span style="color: green; font-family: "Courier New"; font-size: 9pt;">// Установка для карты ее центра и масштаба</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;">map.setCenter(<span style="color: blue;">new</span> YMaps.GeoPoint(55.983161, 54.73794), 12);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>})</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"></</span><span style="color: #a31515;">script</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;"></</span><span lang="EN-US" style="color: #a31515; font-family: "Courier New"; font-size: 9pt;">head</span><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;"><</span><span lang="EN-US" style="color: #a31515; font-family: "Courier New"; font-size: 9pt;">body</span><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">form</span> <span style="color: red;">id</span><span style="color: blue;">="form1"</span> <span style="color: red;">runat</span><span style="color: blue;">="server"></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"><</span><span style="color: #a31515;">div</span> <span style="color: red;">id</span><span style="color: blue;">="YMapsID"</span> <span style="color: red;">style</span><span style="color: blue;">="</span><span style="color: red;">width</span>:<span style="color: blue;">600px</span>;<span style="color: red;">height</span>:<span style="color: blue;">400px"></</span><span style="color: #a31515;">div</span><span style="color: blue;">></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span style="color: blue; font-family: "Courier New"; font-size: 9pt;"></</span><span style="color: #a31515; font-family: "Courier New"; font-size: 9pt;">form</span><span style="color: blue; font-family: "Courier New"; font-size: 9pt;">></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="color: blue; font-family: "Courier New"; font-size: 9pt;"></</span><span style="color: #a31515; font-family: "Courier New"; font-size: 9pt;">body</span><span style="color: blue; font-family: "Courier New"; font-size: 9pt;">></span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;"><span style="color: blue; font-family: "Courier New"; font-size: 9pt; line-height: 150%;"></</span><span style="color: #a31515; font-family: "Courier New"; font-size: 9pt; line-height: 150%;">html</span><span style="color: blue; font-family: "Courier New"; font-size: 9pt; line-height: 150%;">></span><span style="font-family: "Courier New"; font-size: 9pt; line-height: 150%;"></span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><span style="line-height: 150%; mso-no-proof: yes;">Далее напишем запрос к БД, который бы получал необходимые нам данные (Листинг 3).</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;"><span style="line-height: 150%; mso-no-proof: yes;">Листинг 3</span></b><span style="line-height: 150%; mso-no-proof: yes;"> – Запрос к БД для получения данных об объектах</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="color: blue; font-size: 10pt; line-height: 150%;">CREATE</span></i></b><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 10pt; line-height: 150%; mso-ansi-language: EN-US; mso-no-proof: yes;"> <b style="mso-bidi-font-weight: normal;"><span style="color: blue;">PROCEDURE</span></b> dbo.p_Get_ObjectData</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="color: blue; font-size: 10pt; line-height: 150%;">AS</span></i></b></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="color: blue; font-size: 10pt; line-height: 150%;">BEGIN</span></i></b></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 10pt; line-height: 150%; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">SELECT</span></b></span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 10pt; line-height: 150%; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>m.ObjectName_Var,</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 10pt; line-height: 150%; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>m.Address_Var,</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 10pt; line-height: 150%; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>m.Longitude_Var,</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 10pt; line-height: 150%; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>m.Latitude_Var</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><i style="mso-bidi-font-style: normal;"><span lang="EN-US" style="font-size: 10pt; line-height: 150%; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><b style="mso-bidi-font-weight: normal;"><span style="color: blue;">FROM</span></b> t_Map m</span></i></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;"><i style="mso-bidi-font-style: normal;"><span style="color: blue; font-size: 10pt; line-height: 150%;">END</span></i></b></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><span style="line-height: 150%; mso-no-proof: yes;">Теперь напишем обработчик http (</span><span lang="EN-US" style="line-height: 150%; mso-ansi-language: EN-US; mso-no-proof: yes;">handler</span><span style="line-height: 150%; mso-no-proof: yes;">), который будет брать данные в БД и отправлять их на клиент (листинг 4).</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;"><span style="line-height: 150%; mso-no-proof: yes;">Листинг 4</span></b><span style="line-height: 150%; mso-no-proof: yes;"> – Обрабтчик для получения данных и отправки на клиент</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="background-attachment: scroll; background-clip: border-box; background-color: yellow; background-image: none; background-origin: padding-box; background-position: 0% 0%; background-repeat: repeat; background-size: auto; font-family: "Courier New"; font-size: 9pt;"><%</span><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">@</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> <span style="color: #a31515;">WebHandler</span> <span style="color: red;">Language</span><span style="color: blue;">="C#"</span> <span style="color: red;">Class</span><span style="color: blue;">="Handler"</span> <span style="background: yellow; mso-highlight: yellow;">%></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">using</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> System;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">using</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> System.Web;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">using</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> System.Web.Script.Serialization;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">using</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> System.Web.Configuration;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">using</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> System.Data.SqlClient;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">using</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> System.Net;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">using</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> System.Collections.Generic;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">public</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> <span style="color: blue;">class</span> <span style="color: #2b91af;">Handler</span> : <span style="color: #2b91af;">IHttpHandler</span> {</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: blue;">void</span> ProcessRequest (<span style="color: #2b91af;">HttpContext</span> context) {</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span style="color: green; font-family: "Courier New"; font-size: 9pt;">//сформируем список, в котором будут находиться наши объекты</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: #2b91af; font-family: "Courier New"; font-size: 9pt;">List</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><<span style="color: blue;">object</span>> list = <span style="color: blue;">new</span> <span style="color: #2b91af;">List</span><<span style="color: blue;">object</span>>();</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">string</span> connString = <span style="color: #2b91af;">WebConfigurationManager</span>.ConnectionStrings[<span style="color: #a31515;">"UfaolapSite"</span>].ConnectionString;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">using</span> (<span style="color: #2b91af;">SqlConnection</span> con = <span style="color: blue;">new</span> <span style="color: #2b91af;">SqlConnection</span>(connString))</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">string</span> sql = <span style="color: #a31515;">"exec p_Get_ObjectData"</span>;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">SqlCommand</span> cmd = <span style="color: blue;">new</span> <span style="color: #2b91af;">SqlCommand</span>(sql, con);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>con.Open();</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">using</span> (<span style="color: #2b91af;">SqlDataReader</span> reader = cmd.ExecuteReader())</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: blue;">while</span> (reader.Read())</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">var</span> data = <span style="color: blue;">new</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>Name = reader.GetString(0),</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>Address = reader.GetString(1),<span style="mso-spacerun: yes;"> </span><span style="color: green;">//</span></span><span style="color: green; font-family: "Courier New"; font-size: 9pt;">адрес</span><span lang="EN-US" style="color: green; font-family: "Courier New"; font-size: 9pt;"></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>Longitude = reader.GetString(2), <span style="color: green;">//</span></span><span style="color: green; font-family: "Courier New"; font-size: 9pt;">долгота</span><span lang="EN-US" style="color: green; font-family: "Courier New"; font-size: 9pt;"></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>Latitude = reader.GetString(3),<span style="mso-spacerun: yes;"> </span><span style="color: green;">//</span></span><span style="color: green; font-family: "Courier New"; font-size: 9pt;">широта</span><span lang="EN-US" style="color: green; font-family: "Courier New"; font-size: 9pt;"></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>};</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>list.Add(data);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>con.Close();</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span></span><span style="font-family: "Courier New"; font-size: 9pt;">}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: green;">//сериализуем данный спиок для получения его в формате JSON</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: #2b91af; font-family: "Courier New"; font-size: 9pt;">JavaScriptSerializer</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> serializer = <span style="color: blue;">new</span> <span style="color: #2b91af;">JavaScriptSerializer</span>();</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">string</span> output = <span style="color: blue;">string</span>.Format(<span style="color: #a31515;">"var data = [{0}];"</span>, <span style="color: blue;">string</span>.Join(<span style="color: #a31515;">","</span>, list.ConvertAll<<span style="color: blue;">string</span>>(serializer.Serialize).ToArray()));</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>context.Response.ContentType = <span style="color: #a31515;">"text/plain"</span>;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>context.Response.Write(output);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>context.Response.End();</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>context.Response.Cache.SetNoServerCaching();</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: blue;">bool</span> IsReusable {</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span style="color: blue; font-family: "Courier New"; font-size: 9pt;">get</span><span style="font-family: "Courier New"; font-size: 9pt;"> {</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">return</span> <span style="color: blue;">false</span>;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify;"><span style="font-family: "Courier New"; font-size: 9pt; line-height: 150%;">}</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><span style="line-height: 150%;">Тут немного поясню. Сначала мы считали данные об объектах – тут все ясно. А дальше мы сериализуем этот список в формат JSON (JavaScript Object Notation – представление объектов JavaScript) с тем, чтоб его удобно и легко было принять на стороне клиента, и выглядеть это будет, как показано на листинге 5.</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;"><span style="line-height: 150%;">Листинг 5</span></b><span style="line-height: 150%;"> – Список объектов в формате JSON</span><span lang="EN-US" style="line-height: 150%; mso-ansi-language: EN-US;"></span></div><pre><span style="font-size: x-small;"><span lang="EN-US" style="mso-ansi-language: EN-US;">var data = [{"Name":"</span>Памятник<span style="mso-ansi-language: EN-US;"> </span>Салавату<span style="mso-ansi-language: EN-US;"> </span>Юлаеву<span lang="EN-US" style="mso-ansi-language: EN-US;">","Address":"</span>Уфа<span lang="EN-US" style="mso-ansi-language: EN-US;">, </span>Заки<span style="mso-ansi-language: EN-US;"> </span>Валиди<span lang="EN-US" style="mso-ansi-language: EN-US;">, 2","Longitude":"55.925869","Latitude":"54.718393"},{"Name":"</span>УГАТУ<span lang="EN-US" style="mso-ansi-language: EN-US;">","Address":"</span>Уфа<span lang="EN-US" style="mso-ansi-language: EN-US;">, </span>Карла<span style="mso-ansi-language: EN-US;"> </span>Маркса<span lang="EN-US" style="mso-ansi-language: EN-US;">, 12","Longitude":"55.942434","Latitude":"54.72497}, …];</span></span></pre><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><span style="line-height: 150%;">Теперь можно модифицировать нашу заготовку html (листинг 6).</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;"><span style="line-height: 150%;">Листинг 6</span></b><span style="line-height: 150%;"> – Получение данных на клиенте</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="color: blue; font-family: "Courier New"; font-size: 9pt;"><</span><span style="color: #a31515; font-family: "Courier New"; font-size: 9pt;">script</span><span style="font-family: "Courier New"; font-size: 9pt;"> <span style="color: red;">type</span><span style="color: blue;">="text/javascript"></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: green;">// Создание обработчика для события window.onLoad</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>YMaps.jQuery(<span style="color: blue;">function</span> () {</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: green;">// Создание экземпляра карты и его привязка к созданному контейнеру</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt;">var</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"> map = <span style="color: blue;">new</span> YMaps.Map(YMaps.jQuery(<span style="color: #a31515;">"#YMapsID"</span>)[0]);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span style="color: green; font-family: "Courier New"; font-size: 9pt;">// Установка для карты ее центра и масштаба</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;">map.setCenter(<span style="color: blue;">new</span> YMaps.GeoPoint(55.983161, 54.73794), 12);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: green;">// </span></span><span style="color: green; font-family: "Courier New"; font-size: 9pt;">Добавим</span><span style="color: green; font-family: "Courier New"; font-size: 9pt;"> </span><span style="color: green; font-family: "Courier New"; font-size: 9pt;">инструменты</span><span lang="EN-US" style="color: green; font-family: "Courier New"; font-size: 9pt;"></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>map.addControl(<span style="color: blue;">new</span> YMaps.ToolBar());</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>map.addControl(<span style="color: blue;">new</span> YMaps.Zoom());</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>map.addControl(<span style="color: blue;">new</span> YMaps.TypeControl());</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>map.enableScrollZoom();</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>$.post(<span style="color: #a31515;">'Handler.ashx'</span>, <span style="color: #a31515;">''</span>, <span style="color: blue;">function</span>(response)</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: "Courier New"; font-size: 9pt;">{ </span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: green;">// распаковываем JSON, в результате чего получаем </span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: green;">// массив data c данными об объектах</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>eval(response);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: green;">// Создание стиля для значка метки</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;">s = <span style="color: blue;">new</span> YMaps.Style();</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>s.iconStyle = <span style="color: blue;">new</span> YMaps.IconStyle();</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>s.iconStyle.size = <span style="color: blue;">new</span> YMaps.Point(18, 18);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>s.iconStyle.offset = <span style="color: blue;">new</span> YMaps.Point(-9, -9);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>s.balloonContentStyle = <span style="color: blue;">new</span> YMaps.BalloonContentStyle(</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">new</span> YMaps.Template(<span style="color: #a31515;">"<div>$[description]</div>"</span>)</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">for</span> (i <span style="color: blue;">in</span> data) </span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">var</span> point = <span style="color: blue;">new</span> YMaps.GeoPoint(data[i].Longitude, data[i].Latitude);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">var</span> placemark = <span style="color: blue;">new</span> YMaps.Placemark(point, {hasHint: 1, style: s});</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>placemark.name = data[i].Name;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>placemark.description = data[i].Name + <span style="color: #a31515;">"<br />"</span> + data[i].Address;</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: "Courier New"; font-size: 9pt;">map.addOverlay(placemark);</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>});</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span style="font-family: "Courier New"; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span>})</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><span style="font-family: "Courier New"; font-size: 9pt; line-height: 150%;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;"></</span><span style="color: #a31515;">script</span><span style="color: blue;">></span></span><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt; line-height: 150%;"></span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt; line-height: 150%;"></span><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 9pt; line-height: 150%;"></span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><span style="line-height: 150%; mso-no-proof: yes;">Вот и все. На выходе получим страницу как на рисунке 1.</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNPfUdUrKPWukm2tdPeKOlaKyEISE4ozysU6b64V-LwWuVd_bArcUgTG1GzcM9zDvMlWU6zWwwx3aDm1sS4F705dbG5RXB7arMYiKDD37YR-giIGUdXBGd8XklQEv_Pdeqh5V8AHEceLU/s1600/%25D0%2594%25D0%25BB%25D1%258F+%25D1%2581%25D1%2582%25D0%25B0%25D1%2582%25D1%258C%25D0%25B8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="212" l6="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNPfUdUrKPWukm2tdPeKOlaKyEISE4ozysU6b64V-LwWuVd_bArcUgTG1GzcM9zDvMlWU6zWwwx3aDm1sS4F705dbG5RXB7arMYiKDD37YR-giIGUdXBGd8XklQEv_Pdeqh5V8AHEceLU/s320/%25D0%2594%25D0%25BB%25D1%258F+%25D1%2581%25D1%2582%25D0%25B0%25D1%2582%25D1%258C%25D0%25B8.jpg" width="320" /></a></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><div align="center" class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: center; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;"><span style="line-height: 150%;">Рисунок 1</span></b><span style="line-height: 150%;"> – Карта с объектами<span style="mso-no-proof: yes;"></span></span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><span style="line-height: 150%;">Как видно, получился довольно простой и удобный механизм «общения» клиента с сервером и БД. Замечу, что с клиента серверу можно передать параметр, который бы мог служить условием для отбора, например. Как это будет выглядеть показано на листинге 7.</span></div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="line-height: 150%; margin: 0cm 0cm 0pt; text-align: justify; text-indent: 26.95pt;"><b style="mso-bidi-font-weight: normal;"><span style="line-height: 150%;">Листинг 7</span></b><span style="line-height: 150%;"> – Передача параметра с запросом</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 26.95pt;"><span style="font-family: "Courier New"; font-size: 10pt;">$.post(<span style="color: #a31515;">'Handler.ashx'</span>, <span style="color: #a31515;">'</span></span><span lang="EN-US" style="color: #a31515; font-family: "Courier New"; font-size: 10pt;">parametr</span><span style="color: #a31515; font-family: "Courier New"; font-size: 10pt;"> = 0'</span><span style="font-family: "Courier New"; font-size: 10pt;">, <span style="color: blue;">function</span>(response) {…}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 26.95pt;"><br />
</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 26.95pt;">В <a href="http://dedmazdie.blogspot.com/2011/02/yandexmaps-sql-server-2.html">следующей</a> статье рассмотрим формирование YMapsML-файл из БД SQL Server.</div><div class="MsoNormal" style="margin: 0cm 0cm 0pt; mso-layout-grid-align: none; text-indent: 26.95pt;"><br />
<span lang="EN-US" style="font-size: 14pt; mso-ansi-language: EN-US; mso-no-proof: yes;">Успехов в</span><span style="font-size: 14pt; mso-no-proof: yes;"> программировании!</span></div></div>dedMazDiehttp://www.blogger.com/profile/18195725128796745204noreply@blogger.com10tag:blogger.com,1999:blog-2402315195124580440.post-91916883947221421362011-02-24T16:11:00.000+05:002011-02-24T16:11:10.574+05:00Знакомство<div dir="ltr" style="text-align: left;" trbidi="on">Всем привет!<br />
Мое первое сообщение :)</div>dedMazDiehttp://www.blogger.com/profile/18195725128796745204noreply@blogger.com0