<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title><![CDATA[FAQ по форуму ASP.NET: новые сообщения]]></title>
    <link>http://www.gotdotnet.ru/forums/4/124761/</link>
    <description><![CDATA[Новые сообщения в теме "FAQ по форуму ASP.NET" на форуме "ASP.NET WebForms" сайта "GotDotNet.Ru"]]></description>
    <language>ru-RU</language>
    <lastBuildDate>Fri, 12 Mar 2010 21:14:51 UT</lastBuildDate>
    <generator><![CDATA[bitrix::forum.rss]]></generator>
    <docs>http://cyber.law.harvard.edu/rss/rss.html</docs>
    <ttl>60</ttl>
    <item>
      <title><![CDATA[Re: FAQ по форуму ASP.NET]]></title>
      <link>http://www.gotdotnet.ru/forums/4/124761/588489/#post588489</link>
      <description><![CDATA[<span style="line-height: 100%; font-size: 14pt"><b>Вопрос</b></span><br />
<br />
Можно-ли использовать в именах файлов не только латинские символы?Пытаюсь организовать загрузку пользователем файлов с сервера. В именах файлов используются не только латинские символы. В результате, клиент получает в имени файла &quot;<i>крякозябры</i>&quot;...<br />
<br />
<span style="line-height: 100%; font-size: 14pt"><b>Ответ</b></span><br />
<br />
Вкратце:<br />
<br />
<div class="forum-code-box"><pre class="csharp">  HttpUtility.UrlPathEncode(&lt;имя&gt;)</pre></div><!--ForumCodeBoxEnd--><br />
Статья: <noindex><a href="http://codeproject.com/aspnet/NonUSASCII.asp" rel="nofollow"><noindex><a href="http://codeproject.com/aspnet/NonUSASCII.asp" rel="nofollow">http://codeproject.com/aspnet/NonUSASCII.asp</a></noindex></a></noindex><br />
<br />
Ссылки на обсуждения:<br />
<br />
<noindex><a href="http://www.gotdotnet.ru/Forums/Web/180722.aspx" rel="nofollow"><noindex><a href="http://www.gotdotnet.ru/Forums/Web/180722.aspx" rel="nofollow">http://www.gotdotnet.ru/Forums/Web/180722.aspx</a></noindex></a></noindex><br />
<br />
<noindex><a href="http://www.gotdotnet.ru/Forums/Web/325095.aspx" rel="nofollow"><noindex><a href="http://www.gotdotnet.ru/Forums/Web/325095.aspx" rel="nofollow">http://www.gotdotnet.ru/Forums/Web/325095.aspx</a></noindex></a></noindex><br />
<br />
<noindex><a href="http://www.gotdotnet.ru/Forums/Web/254047.aspx" rel="nofollow"><noindex><a href="http://www.gotdotnet.ru/Forums/Web/254047.aspx" rel="nofollow">http://www.gotdotnet.ru/Forums/Web/254047.aspx</a></noindex></a></noindex><br />
<br />
<noindex><a href="http://www.gotdotnet.ru/Forums/Web/311616.aspx" rel="nofollow"><noindex><a href="http://www.gotdotnet.ru/Forums/Web/311616.aspx" rel="nofollow">http://www.gotdotnet.ru/Forums/Web/311616.aspx</a></noindex></a></noindex><br />
<br />
<noindex><a href="http://www.gotdotnet.ru/Forums/Web/272722.aspx" rel="nofollow"><noindex><a href="http://www.gotdotnet.ru/Forums/Web/272722.aspx" rel="nofollow">http://www.gotdotnet.ru/Forums/Web/272722.aspx</a></noindex></a></noindex><br />
<br />
<noindex><a href="http://www.gotdotnet.ru/Forums/Web/338332.aspx" rel="nofollow"><noindex><a href="http://www.gotdotnet.ru/Forums/Web/338332.aspx" rel="nofollow">http://www.gotdotnet.ru/Forums/Web/338332.aspx</a></noindex></a></noindex>]]></description>
      <author><![CDATA[Chavo]]></author>
      <category><![CDATA[FAQ по форуму ASP.NET]]></category>
      <guid isPermaLink="false">urn:bitrix:forum:post:588489</guid>
      <pubDate>Thu, 13 Jul 2006 11:33:21 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Re: FAQ по форуму ASP.NET]]></title>
      <link>http://www.gotdotnet.ru/forums/4/124761/588488/#post588488</link>
      <description><![CDATA[<span style="line-height: 100%; font-size: 14pt"><b>Вопрос</b></span><br />
<br />
WebService как источник данных для Reporting Service SQL Server 2005Указываем запрос:<br />
<div class="forum-code-box"><pre class="xml">
    http://server/app/SimpleWebMethod
</pre></div><!--ForumCodeBoxEnd--><br />
где SimpleWebMethod имеет следующий вид: <div class="forum-code-box"><pre class="csharp">[WebMethod]
public string SimpleWebMethod(string param)
{
    return param;
}
</pre></div><!--ForumCodeBoxEnd--><br />
Однако, похоже, что передаваемый параметр &quot;приходит&quot; как <span style="color: #0000FF">null</span>. Хотя, при тестировании посредством Internet Explorer, передаваемый параметр не теряется...<br />
<br />
<span style="line-height: 100%; font-size: 14pt"><b>Ответ</b></span><br />
<br />
<div class="forum-code-box"><pre class="xml">
http://server/app/SimpleWebMethod
</pre></div><!--ForumCodeBoxEnd--><br />
Более подробное <noindex><a href="http://www.gotdotnet.ru/Forums/Common/313544.aspx" rel="nofollow">описание проблемы</a></noindex> и <noindex><a href="http://channel9.msdn.com/ShowPost.aspx?PostID=137650" rel="nofollow">решение</a></noindex>.<br />
Еще <noindex><a href="http://www.codeproject.com/aspnet/WebAndReportingServices.asp" rel="nofollow">статья</a></noindex>.<br />
<br />
<span style="line-height: 100%; font-size: 8pt"><br />
Огромное СПАСИБО Алексею Павлову (aka <noindex><a href="http://www.gotdotnet.ru/Users_ShowProfile.aspx?user=BlackTigerAP" rel="nofollow">BlackTigerAP</a></noindex>) за привлечение внимания к проблеме и нахождение решения. Спасибо Федору Сойкину (<noindex><a href="http://www.gotdotnet.ru/Users_ShowProfile.aspx?user=Name" rel="nofollow">Name</a></noindex>) за то что не поленился и переслал <noindex><a href="http://www.gotdotnet.ru/Forums/Common/313544.aspx" rel="nofollow">вопрос</a></noindex> в <noindex><a href="http://www.gotdotnet.ru/DotNet/FAQ/ASPNET/default.aspx" rel="nofollow">FAQ по ASP.NET</a></noindex>.<br />
<br />
</span>]]></description>
      <author><![CDATA[Chavo]]></author>
      <category><![CDATA[FAQ по форуму ASP.NET]]></category>
      <guid isPermaLink="false">urn:bitrix:forum:post:588488</guid>
      <pubDate>Thu, 04 May 2006 17:23:48 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Re: FAQ по форуму ASP.NET]]></title>
      <link>http://www.gotdotnet.ru/forums/4/124761/588487/#post588487</link>
      <description><![CDATA[<span style="line-height: 100%; font-size: 14pt"><b>Вопрос</b></span><br />
<br />
Как использовать спец-символы (&amp;&quot;&gt;'&lt;) в web.config?В connectionString хотим использовать сложный пароль, со спец-символами. Например &amp; или &gt;, но получаем сообщение об ошибке: &quot;<span style="color: #FF0000">An error occurred while parsing... Line... position... web.co</span><span style="color: #FF0000">nfig...</span>&quot;. Возможно-ли использование таких символов в web.config?<br />
<br />
<span style="line-height: 100%; font-size: 14pt"><b>Ответ</b></span><br />
<br />
Для представления спец-символов в XML-файлах (а web.config - XML-файл) можно воспользоваться следующей записью: <br />
<br />
<ol type="1"><li>&amp; - &amp;amp;</li><li>&lt; - &amp;lt;</li><li>&gt; - &amp;gt;</li><li>&quot; - &amp;quot;</li><li>' - &amp;#39;</li></ol><br />
Подробнее: <noindex><a href="http://www.w3.org/TR/REC-xml/" rel="nofollow">Character and Entity References</a></noindex>.<br />
<br />
Кроме того, не следует хранить пароли и подобную конфиденциальную информацию в открытом виде. В статье <noindex><a href="http://msdn.microsoft.com/library/en-us/dnpag2/html/PAGPractices0001.asp?frame=true" rel="nofollow">&quot;Security Practices: ASP.NET 2.0 Security Practices at a Glance&quot;</a></noindex>описывается как можно зашифровать секции в конфигурационном файле и прозрачно обращаться к ним из приложения.<br />
<br />
Более подробно:<br />
<br />
<noindex><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/paght000005.asp" rel="nofollow">&quot;How To: Encrypt Configuration Sections in ASP.NET 2.0 Using DPAPI&quot;</a></noindex><br />
<noindex><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/paght000006.asp" rel="nofollow">&quot;How To: Encrypt Configuration Sections in ASP.NET 2.0 Using RSA&quot;</a></noindex>]]></description>
      <author><![CDATA[Chavo]]></author>
      <category><![CDATA[FAQ по форуму ASP.NET]]></category>
      <guid isPermaLink="false">urn:bitrix:forum:post:588487</guid>
      <pubDate>Wed, 03 May 2006 18:18:23 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Re: FAQ по форуму ASP.NET]]></title>
      <link>http://www.gotdotnet.ru/forums/4/124761/588486/#post588486</link>
      <description><![CDATA[<span style="line-height: 100%; font-size: 14pt"><b>Вопрос</b></span><br />
<br />
Где взять TabControl в ASP.NET 2?<span style="line-height: 100%; font-size: 10pt">Пользовался IEWebControls - очень нравилось.<br />
Теперь в&#160;ASP.NET 2&#160;есть дерево, но тулбар и табы не появились.</span><br />
<br />
<span style="line-height: 100%; font-size: 14pt"><b>Ответ</b></span><br />
<br />
Где взять TabControl в ASP.NET 2? Действительно на первый взгляд в стандартных контролах нет ничего подобного. Но это только на первый! Есть контрол System.Web.UI.WebControls. Его можно использовать в качестве TabControl.<br />
<div class="forum-code-box"><pre class="xml">&lt;%@ Page Language=&quot;C#&quot; AutoEventWireup=&quot;true&quot; CodeFile=&quot;Default.aspx.cs&quot; Inherits=&quot;_Default&quot; %&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; &gt;
	&lt;head runat=&quot;server&quot;&gt;
		&lt;title&gt;TabDemo&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;form id=&quot;form1&quot; runat=&quot;server&quot;&gt;
			&lt;div&gt;
&lt;asp:Menu ID=&quot;Menu1&quot; runat=&quot;server&quot; Orientation=&quot;Horizontal&quot; BackColor=&quot;ActiveCaptionText&quot; 
DynamicHorizontalOffset=&quot;0&quot; Font-Names=&quot;Verdana&quot; Font-Size=&quot;0.8em&quot; ForeColor=&quot;DodgerBlue&quot; 
StaticSubMenuIndent=&quot;10px&quot; OnMenuItemClick=&quot;Menu1_MenuItemClick&quot;&gt;
&lt;Items&gt;
&lt;asp:MenuItem Text=&quot;ЏҐаўл&#169;&quot; Value=&quot;0&quot; Selected=&quot;true&quot;&gt;&lt;/asp:MenuItem&gt;
&lt;asp:MenuItem Text=&quot;‚в&#174;а&#174;&#169;&quot; Value=&quot;1&quot;&gt;&lt;/asp:MenuItem&gt;
&lt;asp:MenuItem Text=&quot;’аҐвЁ&#169;&quot; Value=&quot;2&quot;&gt;&lt;/asp:MenuItem&gt;
&lt;/Items&gt;
&lt;StaticMenuItemStyle HorizontalPadding=&quot;5px&quot; VerticalPadding=&quot;2px&quot; /&gt;
&lt;DynamicHoverStyle BackColor=&quot;#99FFFF&quot; ForeColor=&quot;White&quot; /&gt;
&lt;DynamicMenuStyle BackColor=&quot;#E3EAEB&quot; /&gt;
&lt;StaticSelectedStyle BackColor=&quot;#FF0033&quot; /&gt;
&lt;DynamicSelectedStyle BackColor=&quot;#FF0033&quot; /&gt;
&lt;DynamicMenuItemStyle HorizontalPadding=&quot;5px&quot; VerticalPadding=&quot;2px&quot; /&gt;
&lt;StaticHoverStyle BackColor=&quot;#660066&quot; ForeColor=&quot;White&quot; /&gt;
&lt;/asp:Menu&gt;
&lt;asp:MultiView ID=&quot;MultiView1&quot; runat=&quot;server&quot; ActiveViewIndex=&quot;0&quot;&gt;
&lt;asp:View ID=&quot;View1&quot; runat=&quot;server&quot;&gt;
&lt;asp:Label runat=&quot;server&quot; Text=&quot;ЏҐаўл&#169;&quot;&gt;&lt;/asp:Label&gt;
&lt;/asp:View&gt;
&lt;asp:View ID=&quot;View2&quot; runat=&quot;server&quot;&gt;
&lt;asp:Label runat=&quot;server&quot; Text=&quot;‚в&#174;а&#174;&#169;&quot;&gt;&lt;/asp:Label&gt;
&lt;/asp:View&gt;
&lt;asp:View ID=&quot;View3&quot; runat=&quot;server&quot;&gt;
&lt;asp:Label runat=&quot;server&quot; Text=&quot;’аҐвЁ&#169;&quot;&gt;&lt;/asp:Label&gt;
&lt;/asp:View&gt;
&lt;/asp:MultiView&gt;
			&lt;/div&gt;
		&lt;/form&gt;
	&lt;/body&gt;
&lt;/html&gt;
</pre></div><!--ForumCodeBoxEnd--><br />
<div class="forum-code-box"><pre class="csharp">using System;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

public partial class _Default : System.Web.UI.Page 
{
	protected void Menu1_MenuItemClick(object sender, MenuEventArgs e)
	{
		switch (e.Item.Value)
		{
			case &quot;0&quot;:
MultiView1.ActiveViewIndex = 0;
break;
			case &quot;1&quot;:
MultiView1.ActiveViewIndex = 1;
break;
			case &quot;2&quot;:
MultiView1.ActiveViewIndex = 2;
break;
			default:
break;
		}
	}
}
</pre></div><!--ForumCodeBoxEnd-->]]></description>
      <author><![CDATA[Chavo]]></author>
      <category><![CDATA[FAQ по форуму ASP.NET]]></category>
      <guid isPermaLink="false">urn:bitrix:forum:post:588486</guid>
      <pubDate>Wed, 01 Feb 2006 07:04:27 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Re: FAQ по форуму ASP.NET]]></title>
      <link>http://www.gotdotnet.ru/forums/4/124761/588485/#post588485</link>
      <description><![CDATA[<span style="line-height: 100%; font-size: 14pt"><b>Вопрос</b></span><br />
<br />
ASP.NET 2.0  Как получить доступ к пользовательскому классу?Помещаю файл с кодом класса в ASP.NET 2.0 Web-проект, но не могу обратиться к нему, компилятор пишет, что не может найти мой класс, хотя namespace стопроцентно правильный!<br />
<br />
<span style="line-height: 100%; font-size: 14pt"><b>Ответ</b></span><br />
<br />
Файлы с кодом (не являющиеся частью .aspx, .ascx etc) в Web-проектах ASP.NET 2.0 следует помещать в папку App_Code.<br />
<br />
На сайте MSDN: <noindex><a href="http://msdn2.microsoft.com/library/ex526337.aspx" rel="nofollow">ASP.NET Web Site Layout</a></noindex>.<br />
<br />
К вопросу об использовании: <noindex><a href="http://blogs.gotdotnet.ru/personal/ceo/PermaLink.aspx?guid=c30881bc-fe33-406a-bb9f-cbeb7c2069f1" rel="nofollow">доступ к типу, который находится в App_Code</a></noindex>.<br />
<br />
Автор <noindex><a href="http://www.gotdotnet.ru/Users_ShowProfile.aspx?user=Bald" rel="nofollow">Bald</a></noindex>]]></description>
      <author><![CDATA[Chavo]]></author>
      <category><![CDATA[FAQ по форуму ASP.NET]]></category>
      <guid isPermaLink="false">urn:bitrix:forum:post:588485</guid>
      <pubDate>Thu, 12 Jan 2006 10:51:28 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Re: FAQ по форуму ASP.NET]]></title>
      <link>http://www.gotdotnet.ru/forums/4/124761/588484/#post588484</link>
      <description><![CDATA[<span style="line-height: 100%; font-size: 14pt"><b>Вопрос</b></span><br />
<br />
Как в UserControl достучаться до класса Page?<span style="line-height: 100%; font-size: 10pt">Есть вэб форма<br />
<br />
public partial class _Default : Page<br />
....<br />
<br />
в 1.1. я в UC мог написать&#160;так ((_Default)this.Page).[имя&#160; моего свойства]<br />
<br />
в 2.0 же я не могу вообще из UC найти класс формы, где он и в каком&#160;пространстве имен?&#160;Как узнать?</span><br />
<br />
<span style="line-height: 100%; font-size: 14pt"><b>Ответ</b></span><br />
<br />
В ASP.NET 2 применяется другая модель компиляции.<br />
<br />
Что бы имя типа произвольной формы было доступно в UserControl необходимо воспользоваться директивой <span style="line-height: 100%; font-size: 10pt"><span style="color: #0000FF"><br />
<br />
@</span></span> <span style="color: #800000">Reference</span><br />
<span style="color: #800000">Примерно так</span><br />
<span style="line-height: 100%; font-size: 10pt"><span style="color: #800000"><br />
</span></span><span style="line-height: 100%; font-size: 12pt">&lt;%@</span> <span style="color: #800000">Reference</span> <span style="color: #FF0000">Page</span><span style="color: #0000FF">=&quot;~/Dictionaries/ManufactureDict.aspx&quot;</span> %&gt;<br />
<br />
<span style="line-height: 100%; font-size: 10pt">Тогда тип</span><br />
<span style="line-height: 100%; font-size: 10pt"><br />
public</span><span style="line-height: 100%; font-size: 12pt"> </span><span style="color: #0000FF">partial</span><span style="color: #0000FF">class</span><span style="color: #008080">ManufactureDict</span><span style="color: #000000"> : System.Web.UI.</span><span style="color: #008080">Page</span><br />
<span style="line-height: 100%; font-size: 12pt"><span style="color: #000000">Будет доступен в коде UserControl</span></span><br />
<span style="line-height: 100%; font-size: 10pt"><span style="color: #008080"><br />
ManufactureDict</span></span><span style="line-height: 100%; font-size: 12pt"> md = </span><span style="color: #008080">Page</span><span style="color: #0000FF">as</span><span style="color: #008080">ManufactureDict</span><span style="color: #000000">;</span><br />
<span style="line-height: 100%; font-size: 12pt"><span style="color: #000000">Таким же образом можно получить доступ к типу UserControl из произвольного Page. </span></span><br />
<br />
<span style="line-height: 100%; font-size: 12pt"><span style="color: #000000">Только стоит избегать циклических ссылок, когда страница и контрол ссылаются друг на друга. В этом случае будет ошибка.</span></span><br />
<span style="line-height: 100%; font-size: 12pt"><span style="color: #000000">Автор <noindex><a href="http://www.gotdotnet.ru/Users_ShowProfile.aspx?user=" rel="nofollow">Евгений Веприков</a></noindex>.</span></span><br />
<br />
<span style="line-height: 100%; font-size: 10pt"><span style="color: #008080"><br />
<br />
</span></span>]]></description>
      <author><![CDATA[Chavo]]></author>
      <category><![CDATA[FAQ по форуму ASP.NET]]></category>
      <guid isPermaLink="false">urn:bitrix:forum:post:588484</guid>
      <pubDate>Tue, 06 Dec 2005 08:07:04 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Re: FAQ по форуму ASP.NET]]></title>
      <link>http://www.gotdotnet.ru/forums/4/124761/588483/#post588483</link>
      <description><![CDATA[<span style="line-height: 100%; font-size: 14pt"><b>Вопрос</b></span><br />
<br />
После релоада страницы значение поля типа Password не сохраняется. Как с этим бороться?&#160;<br />
<br />
<span style="line-height: 100%; font-size: 14pt"><b>Ответ</b></span><br />
<br />
Читайте значение в Page_Load и записывайте его в аттрибут value.<br />
<br />
<div class="forum-code-box"><pre class="csharp">private void Page_Load(object sender, System.EventArgs e)
{
string str = TextBox1.Text;
TextBox1.Attributes[&quot;value&quot;] = str;
}</pre></div><!--ForumCodeBoxEnd-->]]></description>
      <author><![CDATA[Chavo]]></author>
      <category><![CDATA[FAQ по форуму ASP.NET]]></category>
      <guid isPermaLink="false">urn:bitrix:forum:post:588483</guid>
      <pubDate>Thu, 09 Jun 2005 13:39:42 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Re: FAQ по форуму ASP.NET]]></title>
      <link>http://www.gotdotnet.ru/forums/4/124761/588482/#post588482</link>
      <description><![CDATA[<span style="line-height: 100%; font-size: 14pt"><b>Вопрос</b></span><br />
<br />
Как получить значения динамически добавляемых контролов.Я динамически добавляю на страницу контролы. Как мне получить введенные в них значения после PostBack?<br />
<br />
<span style="line-height: 100%; font-size: 14pt"><b>Ответ</b></span><br />
<br />
Что бы все срабатывало правильно, необходимо чтобы дерево контролов на странице до PostBack и сразу после было идентичным.<br />
<br />
Как вариант могу предложить следующий способ.<br />
<br />
<div class="forum-code-box"><pre class="csharp">using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace Test.ForAnswer
{
/// &lt;summary&gt;
/// Форма показывает использование значений вводимых в динамически добавляемые контролы
/// &lt;/summary&gt;
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.PlaceHolder ph;
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Button Button2;
protected System.Web.UI.WebControls.Label lblResult;
protected System.Web.UI.WebControls.Button Button3;
string CurControlKey = &quot;CurControlKey&quot;;
public string CurrentControl
{
get
{
Object obj = ViewState[CurControlKey];
if (obj == null)
return &quot;first&quot;;
return (string)obj;
}
set
{
ViewState[CurControlKey] = value;
}
}
Control GetFirstControl()
{
Table tab = new Table();
TableRow tr = new TableRow();
TableCell tc = new TableCell();
Label l = new Label();
l.Text = &quot;Первый контрол&quot;;
tc.Controls.Add(l);
tr.Cells.Add(tc);
tc = new TableCell();
TextBox tb = new TextBox();
tb.ID = &quot;firstTextBox&quot;;
tc.Controls.Add(tb);
tr.Cells.Add(tc);
tab.Rows.Add(tr);
return tab;
}
Control GetSecondControl()
{
Table tab = new Table();
TableRow tr = new TableRow();
TableCell tc = new TableCell();
Label l = new Label();
l.Text = &quot;Второй контрол&quot;;
tc.Controls.Add(l);
tr.Cells.Add(tc);
tc = new TableCell();
CheckBox cb = new CheckBox();
cb.ID = &quot;firstChekBox&quot;;
tc.Controls.Add(cb);
tr.Cells.Add(tc);
tab.Rows.Add(tr);
return tab;
}
private void Page_Load(object sender, System.EventArgs e)
{
InitPage();
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{ 
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Button2.Click += new System.EventHandler(this.Button2_Click);
this.Button3.Click += new System.EventHandler(this.Button3_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
/// &lt;summary&gt;
/// Восстанавливаем дерево контролов
/// &lt;/summary&gt;
void InitPage()
{
ph.Controls.Clear();
switch(CurrentControl)
{
case &quot;first&quot;:
ph.Controls.Add(GetFirstControl());
break;
case &quot;second&quot;:
ph.Controls.Add(GetSecondControl());
break;
default:
throw new Exception(&quot;Не определен текущий контрол&quot;);
}
}
private void Button3_Click(object sender, System.EventArgs e)
{
switch(CurrentControl)
{
case &quot;first&quot;:
lblResult.Text = (FindControl(&quot;firstTextBox&quot;) as TextBox).Text;
break;
case &quot;second&quot;:
lblResult.Text = (FindControl(&quot;firstChekBox&quot;) as CheckBox).Checked.ToString();
break;
default:
throw new Exception(&quot;Не определен текущий контрол&quot;);
}
}
private void Button1_Click(object sender, System.EventArgs e)
{
Control c = GetFirstControl();
ph.Controls.Clear();
ph.Controls.Add(c);
CurrentControl = &quot;first&quot;;
}
private void Button2_Click(object sender, System.EventArgs e)
{
Control c = GetSecondControl();
ph.Controls.Clear();
ph.Controls.Add(c);
CurrentControl = &quot;second&quot;;
}
}
}
</pre></div><!--ForumCodeBoxEnd--><br />
Данный метод также позволят обрабатывать события динамически добавляемых контролов.<br />
<br />
Автор <noindex><a href="http://www.gotdotnet.ru/Forums/Users_ShowProfile.aspx?user=" rel="nofollow">Евгений Веприков</a></noindex>.]]></description>
      <author><![CDATA[Chavo]]></author>
      <category><![CDATA[FAQ по форуму ASP.NET]]></category>
      <guid isPermaLink="false">urn:bitrix:forum:post:588482</guid>
      <pubDate>Wed, 06 Apr 2005 12:45:38 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Re: FAQ по форуму ASP.NET]]></title>
      <link>http://www.gotdotnet.ru/forums/4/124761/588481/#post588481</link>
      <description><![CDATA[<span style="line-height: 100%; font-size: 14pt"><b>Вопрос</b></span><br />
<br />
Как после отправки формы не дать перейти на нее по кнопке &quot;Back&quot;?Как правило это нужно для того, чтобы например не записать&#160;два и более раз одни и те же данные в базу данных.<br />
<br />
<span style="line-height: 100%; font-size: 14pt"><b>Ответ</b></span><br />
<br />
Как вариант можно предложить следующее решение.<br />
<br />
<ol type="1"><li>В Page_Load() генерируем GUID и сохраняем его в Session и ViewState.</li><li>В Page_Load, до генерации GUID надо проверить, равны ли GUID сохраненные ранее, если равны, либо их вообще нет(первая загрузка страницы), то все нормально.</li><li>Выполняем действия описанные в пункте первом и продолжаем нормальное исполнение кода страницы.</li><li>Если же GUID в Session и ViewState не равны, то что то не так, обрабатываем ошибку в зависимости от конкретной ситуации.</li></ol><br />
P. S. Можно пользоваться не ViewState, а специально созданным Hidden полем.<br />
Автор <noindex><a href="http://www.gotdotnet.ru/Forums/Web/Users_ShowProfile.aspx?user=" rel="nofollow">Евгений Веприков</a></noindex>.<br />
<br />
еще вариант:<br />
<br />
<div class="forum-code-box"><pre class="csharp">
Response.CacheControl = &quot;no-cache&quot;;
Response.AddHeader(&quot;Pragma&quot;, &quot;no-cache&quot;);
Response.Expires = -1;
Response.AddHeader(&quot;Cache-Control&quot;, &quot;no-cache&quot;);</pre></div><!--ForumCodeBoxEnd--><br />
<br />
Автор <noindex><a href="http://www.rsdn.ru/Users/Profile.aspx?uid=29832" rel="nofollow">Максим Козлов</a></noindex>.]]></description>
      <author><![CDATA[Chavo]]></author>
      <category><![CDATA[FAQ по форуму ASP.NET]]></category>
      <guid isPermaLink="false">urn:bitrix:forum:post:588481</guid>
      <pubDate>Wed, 09 Feb 2005 06:41:31 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Re: FAQ по форуму ASP.NET]]></title>
      <link>http://www.gotdotnet.ru/forums/4/124761/588480/#post588480</link>
      <description><![CDATA[<span style="line-height: 100%; font-size: 14pt"><b>Вопрос</b></span><br />
<br />
События для обмена информацией между контролами, расположенными на странице.Предположим на странице есть два контрола. Как передать информацию из одного в другой.<br />
<br />
<span style="line-height: 100%; font-size: 14pt"><b>Ответ</b></span><br />
<br />
Предположим на странице есть два контрола, на одном содержится TextBox и Button, а на втором Label. Мы хотим внести текст в TextBox, нажать на Button и чтобы введенный текст отобразился в Label второго контрола. Контролы знать не знают друг о друге. Страница ничего не знает о внутреннем устройстве контролов. Для простоты будем использовать UserControl с кастомконтролами все аналогично.<br />
Реализуем в первом контроле событие, а во втором обработчик этого события.<br />
Итак класс, представляющий аргумент события.<br />
<div class="forum-code-box"><pre class="csharp">/// &lt;summary&gt;
/// Класс представляет собой аргумент нашего события
/// &lt;/summary&gt;
public class WebEventEventArgs:EventArgs
{
private string _caption = string.Empty;
/// &lt;summary&gt;
/// статическое поле имеющее тип данного класса и представляющее ссылку на пустое значение класса
/// &lt;/summary&gt;
public static readonly WebEventEventArgs Empty;
/// &lt;summary&gt;
/// публичное свойство, предоставляющее доступ к передаваемой строке
/// &lt;/summary&gt;
public string Caption
{
get
{
return _caption;
}
}
/// &lt;summary&gt;
/// конструктор
/// &lt;/summary&gt;
/// &lt;param name=&quot;caption&quot;&gt;передаваемая обработчику строка&lt;/param&gt;
public WebEventEventArgs(string caption)
{
_caption = caption;
}
/// &lt;summary&gt;
/// статический конструктор для свойства, означающего &quot;пустой&quot; класс
/// &lt;/summary&gt;
static WebEventEventArgs()
{
WebEventEventArgs.Empty = new WebEventEventArgs(string.Empty);
}
}</pre></div><!--ForumCodeBoxEnd--><br />
<br />
Делегат реализующий вызов обработчика события.<br />
<div class="forum-code-box"><pre class="csharp">/// &lt;summary&gt;
/// Объявляем делегат для нашего события
/// &lt;/summary&gt;
public delegate void WebEventEventHandler(object sender, WebEventEventArgs e);</pre></div><!--ForumCodeBoxEnd--><br />
<br />
Класс первого UserControl содержащий событие.<br />
<div class="forum-code-box"><pre class="csharp">public class TxbAndButton : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.TextBox txbText;
protected System.Web.UI.WebControls.Button Button1;
/// &lt;summary&gt;
/// данное поле является ключом в хештаблице, хранящей объект делегата, отвечающего за обработку нашего события
/// &lt;/summary&gt;
private static readonly object WebEventKey = new object();
/// &lt;summary&gt;
/// Наше событие
/// &lt;/summary&gt;
public event WebEventEventHandler LabelChanged 
{
add
{
Events.AddHandler(WebEventKey,value);
}
remove
{
Events.RemoveHandler(WebEventKey,value);
}
}
private void Page_Load(object sender, System.EventArgs e)
{

}
/// &lt;summary&gt;
/// Данный метод является возбудителем события
/// &lt;/summary&gt;
/// &lt;param name=&quot;e&quot;&gt;Коммандный аргумент, передающий строку&lt;/param&gt;
private void OnLabelChanged(WebEventEventArgs e)
{
///если кто-то подписался на данное событие, уведомить его
///Вообще-то возможно, что подписавщихся будет много и для обработки лучше воспользоваться
///таким кодом Delegate[] d = weeh.GetInvocationList();
///for (int i = 0; i &lt; d.Length;i++)&gt;
///{
///(d[i] as WebEventEventHandler)(this,e);
///}
///либо вообще асинхронным вызовом, но, в рамках ASP.NET, такое редко можно встретить
WebEventEventHandler weeh = (WebEventEventHandler)Events[WebEventKey];
if (weeh != null)
weeh(this,e);

}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
/// &lt;summary&gt;
/// Обработчик нажатия кнопки
/// &lt;/summary&gt;
/// &lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;
/// &lt;param name=&quot;e&quot;&gt;&lt;/param&gt;
private void Button1_Click(object sender, System.EventArgs e)
{
///создаем объект класса описывающего параметры события
WebEventEventArgs weea = new WebEventEventArgs(txbText.Text);
///возбуждаем событие
OnLabelChanged(weea);
}
}</pre></div><!--ForumCodeBoxEnd--><br />
<br />
Его.ascx.<br />
<br />
<div class="forum-code-box"><pre class="xml">&lt;%@ Control Language=&quot;c#&quot; AutoEventWireup=&quot;false&quot; Codebehind=&quot;TxbAndButton.ascx.cs&quot; Inherits=&quot;Orenburg.TxbAndButton&quot; TargetSchema=&quot;http://schemas.microsoft.com/intellisense/ie5&quot;%&gt;
&lt;P&gt;
&lt;asp:TextBox id=&quot;txbText&quot; runat=&quot;server&quot;&gt;&lt;/asp:TextBox&gt;&lt;/P&gt;
&lt;P&gt;
&lt;asp:Button id=&quot;Button1&quot; runat=&quot;server&quot; Text=&quot;Нажми меня&quot;&gt;&lt;/asp:Button&gt;&lt;/P&gt;
</pre></div><!--ForumCodeBoxEnd--><br />
<br />
Класс второго контрола.<br />
<div class="forum-code-box"><pre class="csharp">using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
public class OnlyLabel : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.Label Label1;
private void Page_Load(object sender, System.EventArgs e)
{

}
/// &lt;summary&gt;
/// Данный метод являеся обработчиком события первого UserControl
/// &lt;/summary&gt;
/// &lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;
/// &lt;param name=&quot;e&quot;&gt;&lt;/param&gt;
public void LabelChanged(object sender, WebEventEventArgs e)
{
Label1.Text = e.Caption;
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}

</pre></div><!--ForumCodeBoxEnd--><br />
<br />
Его .ascx.<br />
<br />
<div class="forum-code-box"><pre class="xml">&lt;%@ Control Language=&quot;c#&quot; AutoEventWireup=&quot;false&quot; Codebehind=&quot;OnlyLabel.ascx.cs&quot; Inherits=&quot;Orenburg.OnlyLabel&quot; TargetSchema=&quot;http://schemas.microsoft.com/intellisense/ie5&quot;%&gt;
&lt;asp:Label id=&quot;Label1&quot; runat=&quot;server&quot;&gt;&lt;/asp:Label&gt;
</pre></div><!--ForumCodeBoxEnd--><br />
<br />
Переносим оба контрола на страницу. Немного изменяем Page_Load у страницы. Вот как должно получиться.<br />
<div class="forum-code-box"><pre class="csharp">public class WebEvent : System.Web.UI.Page
{
private TxbAndButton TxbAndButton1;
private OnlyLabel OnlyLabel1;
private void Page_Load(object sender, System.EventArgs e)
{
///Находим контролы по их ID
TxbAndButton1 = FindControl(&quot;TxbAndButton1&quot;) as TxbAndButton;
OnlyLabel1 = FindControl(&quot;OnlyLabel1&quot;) as OnlyLabel;
///Если нашли, подписываем второй контрол на обработку события первого
if (OnlyLabel1 != null &amp;&amp; TxbAndButton1 != null)
TxbAndButton1.LabelChanged += new WebEventEventHandler(OnlyLabel1.LabelChanged);
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}
private void InitializeComponent()
{ 
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}</pre></div><!--ForumCodeBoxEnd--><br />
<br />
Компилируем и запускаем на выполнение. Как мы видим, при нажатии на кнопку в Label второго контрола, текст из TextBox первого.<br />
Основываясь на данном примере, можно реализовывать алгоритмы для своих потребностей.<br />
<br />
Автор <noindex><a href="http://www.gotdotnet.ru/Forums/Web/Users_ShowProfile.aspx?user=" rel="nofollow">Евгений Веприков.</a></noindex>]]></description>
      <author><![CDATA[Chavo]]></author>
      <category><![CDATA[FAQ по форуму ASP.NET]]></category>
      <guid isPermaLink="false">urn:bitrix:forum:post:588480</guid>
      <pubDate>Mon, 20 Dec 2004 15:15:51 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Re: FAQ по форуму ASP.NET]]></title>
      <link>http://www.gotdotnet.ru/forums/4/124761/588479/#post588479</link>
      <description><![CDATA[<span style="line-height: 100%; font-size: 14pt"><b>Вопрос</b></span><br />
<br />
_VIEWSTATE. Что это, для чего и как с ним &quot;бороться&quot;?Состояние отображения (VIEWSTATE) в ASP.NET для чего&#160;нужно? Как уменьшить? Как отключить?<br />
<br />
<span style="line-height: 100%; font-size: 14pt"><b>Ответ</b></span><br />
<br />
&quot;Понимание состояния отображения ASP.NET&quot;<noindex><a href="http://uneta.org/default.aspx?mnuid=45BAD490-2543-4F6E-82B6-C9186DFF5898&amp;amp" rel="nofollow"><span style="line-height: 100%; font-size: 14pt">статья</span></a></noindex>.<br />
<br />
&quot;Как сохранить ViewState в объекте Session?&quot;, &quot;Как сохраненить ViewState в произвольном хранилище?&quot;<noindex><a href="http://www.uneta.org/Meetings/20040730/Media/ViewState/ViewState.htm" rel="nofollow"><span style="line-height: 100%; font-size: 14pt">презентация</span></a></noindex> &quot;тяжелая&quot;.<br />
<br />
<noindex><a href="http://www.gotdotnet.ru/Forums/ASPNET/67763.aspx" rel="nofollow"><span style="line-height: 100%; font-size: 14pt">Обсуждение</span></a></noindex> способов уменьшить размер VIEWSTATE.<br />
<br />
Еще одно <noindex><a href="http://www.gotdotnet.ru/Forums/ASPNET/10355.aspx" rel="nofollow"><span style="line-height: 100%; font-size: 14pt">обсуждение</span></a></noindex> по теме.]]></description>
      <author><![CDATA[Chavo]]></author>
      <category><![CDATA[FAQ по форуму ASP.NET]]></category>
      <guid isPermaLink="false">urn:bitrix:forum:post:588479</guid>
      <pubDate>Fri, 29 Oct 2004 05:20:52 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Re: FAQ по форуму ASP.NET]]></title>
      <link>http://www.gotdotnet.ru/forums/4/124761/588478/#post588478</link>
      <description><![CDATA[<span style="line-height: 100%; font-size: 14pt"><b>Вопрос</b></span><br />
<br />
Debug. Проблемы с отладкой ASP.NET приложений.Отладчик не запускается, не хватает прав и т.п.<br />
<br />
<span style="line-height: 100%; font-size: 14pt"><b>Ответ</b></span><br />
<br />
<noindex><a href="http://www.uneta.org/default.aspx?mnuid=45BAD490-2543-4F6E-82B6-C9186DFF5898&amp;amp" rel="nofollow">Решения некоторых проблем при отладке ASP.NET приложений.</a></noindex>]]></description>
      <author><![CDATA[Chavo]]></author>
      <category><![CDATA[FAQ по форуму ASP.NET]]></category>
      <guid isPermaLink="false">urn:bitrix:forum:post:588478</guid>
      <pubDate>Mon, 20 Sep 2004 04:53:50 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Re: FAQ по форуму ASP.NET]]></title>
      <link>http://www.gotdotnet.ru/forums/4/124761/588477/#post588477</link>
      <description><![CDATA[<span style="line-height: 100%; font-size: 14pt"><b>Вопрос</b></span><br />
<br />
WS. Как в веб-сервис передаются параметры по-ссылке?Насколько&#160; я понимаю, в веб-сервис нельзя передать параметры&#160; по ссылке. Почему тогда в ASP.NET можно создавать&#160; методы&#160; веб-сервисов с ref-параметрами?<br />
Как-же они работают?<br />
<br />
<span style="line-height: 100%; font-size: 14pt"><b>Ответ</b></span><br />
<br />
Да, передавать параметры по ссылке в веб-сервис<br />
невозможно. Дело в том, что при создании такого<br />
метода ASP.NET генерирует WSDL-описание, в котором<br />
метод имеет два параметра с одним именем - один<br />
входной и один выходной.<br />
<br />
Рассмотрим в качестве примера простой метод:<br />
<br />
<div class="forum-code-box"><pre class="csharp">public string HelloWorld( ref int refParam );</pre></div><!--ForumCodeBoxEnd--><br />
При вызове метода клиент передаёт значение параметра:<br />
<br />
<div class="forum-code-box"><pre class="xml">&lt;soap:Body&gt;
 &lt;HelloWorld xmlns=&quot;http://tempuri.org/&quot;&gt;
 &lt;refParam&gt;int&lt;/refParam&gt;
 &lt;/HelloWorld&gt;
 &lt;/soap:Body&gt;</pre></div><!--ForumCodeBoxEnd--><br />
а при возврате веб-сервис передаёт клиенту обратно &quot;новое&quot; значение - в виде выходного параметра:<br />
<br />
<div class="forum-code-box"><pre class="xml">&lt;soap:Body&gt;
 &lt;HelloWorldResponse xmlns=&quot;http://tempuri.org/&quot;&gt;
 &lt;HelloWorldResult&gt;string&lt;/HelloWorldResult&gt;
 &lt;refParam&gt;int&lt;/refParam&gt;
 &lt;/HelloWorldResponse&gt;
 &lt;/soap:Body&gt;</pre></div><!--ForumCodeBoxEnd--><br />
При генерации класса-посредника Visual Studio<br />
создаёт метод с таким же ref-параметром и<br />
обрабатывает его так, чтобы после вызова метода в<br />
этот параметр записывалось возвращаемое значение.<br />
Выглядит такой метод примерно так:<br />
<br />
<span style="line-height: 100%; font-size: 8pt"><br />
</span><div class="forum-code-box"><pre class="csharp">001 public string HelloWorld( ref int refParam )
002  {
003  object[] result = this.Invoke( &quot;HelloWorld&quot;,
004  new object[] { refParam } );
005  
006  refParam = (int) result[1];
007  return (string) result[0];
008  }</pre></div><!--ForumCodeBoxEnd--><br />
<br />
В строке <i>006</i> как раз возвращённое из веб-сервиса<br />
&quot;новое&quot; значение параметра записывается по ссылке,<br />
переданной клиентом.<br />
<br />
Таким образом, как для разработчика веб-сервиса<br />
так и для клиента его вызывающего, возникает<br />
полная иллюзия передачи параметра по ссылке.<br />
Разумеется, при асинхронном вызове методов<br />
веб-сервиса с этим будут проблемы, но это уже<br />
&quot;совсем другой вопрос.&quot;<br />
<br />
Автор: Фёдор Сойкин a.k.a. <noindex><a href="http://www.gotdotnet.ru/Forums/Users_ShowProfile.aspx?user=Name" rel="nofollow">Name</a></noindex>]]></description>
      <author><![CDATA[Chavo]]></author>
      <category><![CDATA[FAQ по форуму ASP.NET]]></category>
      <guid isPermaLink="false">urn:bitrix:forum:post:588477</guid>
      <pubDate>Thu, 17 Jun 2004 19:14:46 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Re: FAQ по форуму ASP.NET]]></title>
      <link>http://www.gotdotnet.ru/forums/4/124761/588476/#post588476</link>
      <description><![CDATA[<span style="line-height: 100%; font-size: 14pt"><b>Вопрос</b></span><br />
<br />
Как программно создать ItemTemplate в System.Web.UI.WebControls.DataGrid?<br />
<br />
<span style="line-height: 100%; font-size: 14pt"><b>Ответ</b></span><br />
<br />
<div class="forum-code-box"><pre class="csharp">
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace tests
{
public class WebForm5 : System.Web.UI.Page
{
 protected System.Web.UI.WebControls.PlaceHolder PlaceHolder1;

 private void Page_Load(object sender, System.EventArgs e)
 {
 ///создаем DataGrid
 DataGrid dg=new DataGrid();
 ///помещаем его на страницу
 PlaceHolder1.Controls.Add(dg);
 ///создаем объект класса TemplateColumn
 TemplateColumn tc=new TemplateColumn();
 ///инициализируем его свойство HeaderText,
 ///при необходимости инициализируем остальные свойства 
 tc.HeaderText=&quot;Наименование&quot;;
 ///ВАЖНО! Неоходимо инициализировать хотя-бы свойство ItemTemplate
 ///при необходимости инициализируем свойства EditItemTemplate и FooterTemplate
 ///объектами, реализующих ITemplate 
 tc.ItemTemplate=new MyTemplate();
 ///добавляем шаблонный столбец в коллекцию столбцов DataGrid
 dg.Columns.Add(tc);
 ///заполняем DataGrid данными
 dg.DataSource=GetGridData().DefaultView;
 dg.DataBind();
}
 /// &lt;summary&gt;
 /// Метод должен вернуть объект типа DataTable.
 /// Предполагается, что один из столбцов называется Name
 /// &lt;/summary&gt;
 /// &lt;returns&gt;&lt;/returns&gt;
 private DataTable GetGridData()
 {
 ///код заполняющий DataTable (например из базы данных)
 ///необходимо, чтобы результат содержал
 ///столбец с именем Name, либо в tb_DataBinding(смотрите класс MyTemplate), в
 ///tb.Text=DataBinder.Eval(dgi.DataItem,&quot;Name&quot;);
///вместо &quot;Name&quot;, указать используемоя имя столбца
 ...
 }
 #region Web Form Designer generated code
 override protected void OnInit(EventArgs e)
 {
 //
 // CODEGEN: This call is required by the ASP.NET Web Form Designer.
 //
 InitializeComponent();
 base.OnInit(e);
 }
/// &lt;summary&gt;
 /// Required method for Designer support - do not modify
 /// the contents of this method with the code editor.
 /// &lt;/summary&gt;
 private void InitializeComponent()
 { 
 this.Load += new System.EventHandler(this.Page_Load);
 }
 #endregion
}
public class MyTemplate:System.Web.UI.ITemplate
{
 public MyTemplate()
 {}
 #region ITemplate Members
 /// &lt;summary&gt;
 /// Реализация метода InstantiateIn интерфейса
 /// &lt;/summary&gt;
 /// &lt;param name=&quot;container&quot;&gt;ячейка DataGrid в которую поместятся дочерние контралы&lt;/param&gt;
 public void InstantiateIn(Control container)
 {
 ///создать можно любое количество любых контралов
 ///для примера созданы TextBox, Button и тег HTML &lt;BR&gt; для
 ///переноса кнопки на новую строку
 TextBox tb=new TextBox();
 tb.TextChanged+=new EventHandler(tb_TextChanged);
 tb.DataBinding+=new EventHandler(tb_DataBinding);
 container.Controls.Add(tb);
 LiteralControl lc=new LiteralControl(&quot;&lt;br&gt;&quot;);
 container.Controls.Add(lc);
 Button b=new Button();
 b.Text=&quot;Нажми меня&quot;;
 b.Click+=new EventHandler(b_Click);
 container.Controls.Add(b);
}
 #endregion
 /// &lt;summary&gt;
 /// Обработка события нажатия на кнопку
 /// &lt;/summary&gt;
 /// &lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;
 /// &lt;param name=&quot;e&quot;&gt;&lt;/param&gt;
 private void b_Click(object sender, EventArgs e)
 {
 //Ссылка на кнопку вызвавшую событие
 Button b=sender as Button;
 //получаем значение свойства Text, TextBox находящегося в одной 
 //ячейке с нашей кнопкой
 string st=(b.Parent.Controls[0] as TextBox).Text;
 }
 /// &lt;summary&gt;
 /// Метод будет вызван при связывании данных
 /// &lt;/summary&gt;
 /// &lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;
 /// &lt;param name=&quot;e&quot;&gt;&lt;/param&gt;
 private void tb_DataBinding(object sender, EventArgs e)
 {
 //получаем ссылку на TextBox вызвавший событие
 TextBox tb=sender as TextBox;
 //Находим DataGridItem в котором находится наш TextBox
 DataGridItem dgi=tb.NamingContainer as DataGridItem;
 //устанавливаем значение свойства Text
 tb.Text=DataBinder.Eval(dgi.DataItem,&quot;Name&quot;);
 }
}
}
</pre></div><!--ForumCodeBoxEnd--><br />
<br />
Автор <noindex><a href="http://www.gotdotnet.ru/DotNet/FAQ/ASPNET/Users_ShowProfile.aspx?user=" rel="nofollow">Евгений Веприков</a></noindex>]]></description>
      <author><![CDATA[Chavo]]></author>
      <category><![CDATA[FAQ по форуму ASP.NET]]></category>
      <guid isPermaLink="false">urn:bitrix:forum:post:588476</guid>
      <pubDate>Fri, 14 May 2004 11:03:28 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Re: FAQ по форуму ASP.NET]]></title>
      <link>http://www.gotdotnet.ru/forums/4/124761/588475/#post588475</link>
      <description><![CDATA[<span style="line-height: 100%; font-size: 14pt"><b>Вопрос</b></span><br />
<br />
Как автоматически аутентифицировать доменных пользователей в локальной сети и выводить приглашение для остальных?<br />
<br />
<span style="line-height: 100%; font-size: 14pt"><b>Ответ</b></span><br />
<br />
Укажитев web.config режим &quot;Windows&quot;для аутентификации:<br />
<br />
<div class="forum-code-box"><pre class="xml">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;configuration&gt;
&lt;system.web&gt;
&lt;authentication mode=&quot;Windows&quot; /&gt; 
...
&lt;/system.web&gt;
&lt;/configuration&gt;</pre></div><!--ForumCodeBoxEnd--><br />
<br />
В &quot;IIS Administration&quot;,вкладка &quot;Security&quot;, для каталога приложения, укажите &quot;basic&quot; и &quot;Windows Integrated&quot;.]]></description>
      <author><![CDATA[Chavo]]></author>
      <category><![CDATA[FAQ по форуму ASP.NET]]></category>
      <guid isPermaLink="false">urn:bitrix:forum:post:588475</guid>
      <pubDate>Fri, 23 Jan 2004 11:21:03 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Re: FAQ по форуму ASP.NET]]></title>
      <link>http://www.gotdotnet.ru/forums/4/124761/588474/#post588474</link>
      <description><![CDATA[<span style="line-height: 100%; font-size: 14pt"><b>Вопрос</b></span><br />
<br />
Как добавить собственный параметр в web.config и считать его.<br />
<br />
<span style="line-height: 100%; font-size: 14pt"><b>Ответ</b></span><br />
<br />
создаем параметр в web.config<br />
<br />
<div class="forum-code-box"><pre class="xml">&lt;configuration&gt;
 &lt;appSettings&gt;
 &lt;add key=&quot;ConnectionString&quot; value=&quot;data source=localhost;Initial Catalog=pubs;user id=sa;Password=;&quot;/&gt;
 &lt;/appSettings&gt; 
...
&lt;/configuration&gt;
</pre></div><!--ForumCodeBoxEnd--><br />
<br />
получаем параметр из web.config :<br />
<br />
<div class="forum-code-box"><pre>strConn = ConfigurationSettings.AppSettings(&quot;ConnectionString&quot;)
</pre></div><!--ForumCodeBoxEnd--><br />
<br />
Кроме того, прочитайте статью &quot;<noindex><a href="http://www.gotdotnet.ru/LearnDotNet/NETFramework/81641.aspx" rel="nofollow"><span style="line-height: 100%; font-size: 14pt">Обработка собственных секций в конфигурационном файле</span></a></noindex>&quot;.]]></description>
      <author><![CDATA[Chavo]]></author>
      <category><![CDATA[FAQ по форуму ASP.NET]]></category>
      <guid isPermaLink="false">urn:bitrix:forum:post:588474</guid>
      <pubDate>Wed, 21 Jan 2004 06:01:14 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Re: FAQ по форуму ASP.NET]]></title>
      <link>http://www.gotdotnet.ru/forums/4/124761/588473/#post588473</link>
      <description><![CDATA[<span style="line-height: 100%; font-size: 14pt"><b>Вопрос</b></span><br />
<br />
Свойство ID элементов в шаблонных столбцах переустанавливается в значение по-умолчанию. Почему?..<br />
<br />
<span style="line-height: 100%; font-size: 14pt"><b>Ответ</b></span><br />
<br />
В результате такие методы как FindControl(ID) возвращают нулевое значение, что в дальнейшем приводит к нежелательным исключениям. Почемуэто происходит?<br />
У всех элементов управления, предназначенных для отображения списков данных с поддержкой шаблонов: Repeater, DataList, DataGrid, контейнер, в котором создаютсяэлементы из шаблонов, единый для всех видов шаблонов. Т.е. все элементы, которые находятся в ItemTemplate, AlternatingItemTemplate, EditItemTemplate и SelectedItemTemplate находятся в одном INamingContainer, и дизайнер отслеживает, чтобы элементы с одинаковым ID в нем не встречались.При заданииэлементу ID, такого же, как усуществующего,происходит замена значения в ID существующего элементана значение по-умолчанию, несмотря на то, что в run-time невозможна ситуация,когда для одной строки создаются два разныхшаблона одновременно.]]></description>
      <author><![CDATA[Chavo]]></author>
      <category><![CDATA[FAQ по форуму ASP.NET]]></category>
      <guid isPermaLink="false">urn:bitrix:forum:post:588473</guid>
      <pubDate>Tue, 23 Dec 2003 15:10:21 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Re: FAQ по форуму ASP.NET]]></title>
      <link>http://www.gotdotnet.ru/forums/4/124761/588472/#post588472</link>
      <description><![CDATA[<span style="line-height: 100%; font-size: 14pt"><b>Вопрос</b></span><br />
<br />
Что такое &lt;%# %&gt;, &lt;% %&gt;, &lt;%= %&gt; и &lt;script runat=”server”&gt; &lt;/script&gt;?<br />
<br />
<span style="line-height: 100%; font-size: 14pt"><b>Ответ</b></span><br />
<br />
<ol type="1"><li>&lt;%# %&gt; data-binding expression</li><li>&lt;% %&gt; code render block</li><li>&lt;%= %&gt; code declaration block</li><li>&lt;script runat=”server”&gt; &lt;/script&gt;server code declaration block</li></ol><br />
Блок &lt;%# %&gt; называется data-binding expression – выражение привязки к данным. Код из этих блоков используется в методах-обработчиках события DataBinding элемента, в теле которого блок был объявлен. Код этого метода выглядит в общем случает так:<br />
<div class="forum-code-box"><pre>public void __DataBind__controlX(object sender, System.EventArgs e){	//  Объявляется переменная Container. Тип переменной зависит от
	//  того, в теле какого элемента используется выражение привязки.
	//  В данном случае, привязка осуществляется в ItemTemplate элемента
	//  DataGrid, для него атрибутом TemplateContainerAttribute был 
	//  установлен класс контейнера DataGridItem. Если привязка 
	//  происходит не в шаблоне, то тип переменной Container всегда
	//  будет System.Web.UI.Control.
	//
	System.Web.UI.WebControls.DataGridItem Container;	//
	//  Объявляется переменная target. Это объект, в теле которого
	//  используется блок привязки. Для шаблона, target - всегда
	//  DataBoundLiteralControl.
	//
	System.Web.UI.DataBoundLiteralControl target;	//  инициализация переменных.
	target = ((System.Web.UI.DataBoundLiteralControl)(sender));
	Container = ((System.Web.UI.WebControls.DataGridItem)(target.BindingContainer));
	//  выполнение кода привязки. 
	target.SetDataBoundString(0, (System.Convert.ToString(/*содержимое блока &lt;%# %&gt;*/));
	//  Если в коде страницы привязка была использована в виде 
	//  attributeName=’&lt;%# someExpr %&gt;’, то предыдущий код будет выглядеть иначе:
	//
	//  target.attributeName = ((&lt;ожидаемый тип атрибута&gt;)(someExpr));
	//
}
</pre></div><!--ForumCodeBoxEnd--><br />
<br />
В теле блока &lt;%# %&gt; можно свободно использовать переменные Container и target. Следует помнить, что объявленные в странице свойства или поля с такими именами будут перекрыты этими переменными в коде блока привязки данных.<br />
<br />
Блок &lt;% %&gt; и &lt;%= %&gt; называется code render block – блоки отображения. Код из этих блоков складывается в методы-делегаты вызываемые на стадии Rendering тех элементов, внутри которых данные блоки были размещены разработчиком. Первый блок предназначен для внедрения в страницу кода, который можно выполнить на этой стадии, и вовсе не обязательно должен как-то сказаться на итоговом ее соджержимом, второй используется в виде &lt;%= someExpr %&gt; является сокращением &lt;% Response.Write(someExpr) %&gt;. Здесь someExpr – это любое выражение, которое будет обработано методом Write() класса HtmlTextWriter. В теле блока &lt;% %&gt; допустимо объявлять переменные, тогда они будут локальными для того метода, в котором данный блок будет реализован. В теле блока &lt;% %&gt; нельзя объявлять методы или типы.<br />
Блок &lt;script runat=”server”&gt; &lt;/script&gt; называется server code declaration block – блок объявления кода. Содержимое данных блоков ASP.NET добавляет в объявление класса страницы, при создании итоговой dll, соответственно в коде блока должны быть только объявления методов, переменных, и классов, которые будут доступны в коде всей страницы. Поскольку данный код содержится в классе, наследуемом от класса страницы, объявленного в code-behind файле (или непосредственно от System.Web.UI.Page), здесь можно переписывать объявления виртуальных методов/свойств родительского класса.<br />
Код во всех блоках выполняется в области видимости страницы: т.о. еслибудет написано &lt;% SomeProp = “SomePropValueStr” %&gt; свойство SomeProp должно быть объявлено либо здесь же, в странице, с помощью блока объявления кода, и тогда область видимости SomeProp может быть любой, либо в code-behind файле, и тогда область видимости SomeProp должна быть не меньше Protected.]]></description>
      <author><![CDATA[Chavo]]></author>
      <category><![CDATA[FAQ по форуму ASP.NET]]></category>
      <guid isPermaLink="false">urn:bitrix:forum:post:588472</guid>
      <pubDate>Tue, 23 Dec 2003 13:42:07 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Re: FAQ по форуму ASP.NET]]></title>
      <link>http://www.gotdotnet.ru/forums/4/124761/588471/#post588471</link>
      <description><![CDATA[<span style="line-height: 100%; font-size: 14pt"><b>Вопрос</b></span><br />
<br />
Доступ к файлам. Как предоставить файл только зарегистрированному пользователю?<br />
<br />
<span style="line-height: 100%; font-size: 14pt"><b>Ответ</b></span><br />
<br />
Допустим, что файл хранится в недоступной пользователю папке.<br />
<br />
И пользователю предоставляется подобным запросом: <br />
<br />
&lt;A href=&quot;about:это, всего-лишь, пример запроса&quot;&gt;<b><noindex><a href="http://site.ru/MyApp/GetFile.aspx?FileName=file.dat" rel="nofollow">http://site.ru/MyApp/GetFile.aspx?FileName=file.dat</a></noindex></b>&lt;/A&gt;<br />
<br />
Создадим HttpHandler:<br />
<div class="forum-code-box"><pre class="csharp">public class MyHttpHandler : IHttpHandler 
{ 
public bool IsReusable { get { return true; } }
public void ProcessRequest( HttpContext context ) 
{ 
// получаем из запроса имя файла 
string strRequestedFile = context.Request.QueryString[ &quot;FileName&quot; ]; 
// открываем файл с полученным именем
FileStream stmFileStream = new FileStream( @&quot;D:\MySecureFolder\&quot; + strRequestedFileName, FileMode.Open ); 
// заполняем буфер содержимым файла
byte[] buffer = new byte[ stmFileStream.Length ]; 
stmFileStream.Read( buffer, 0, buffer.Length ); 
stmFileStream.Close();
// отправляем содержимое буфера клиенту 
context.Response.ContentType = &quot;application/octet-stream&quot;;
context.Response.OutputStream.Write( buffer, 0, buffer.Length ); 
} // ProcessRequest
} // MyHttpHandler</pre></div><!--ForumCodeBoxEnd--><br />
Затем,в web.config, укажем:<br />
<div class="forum-code-box"><pre class="xml">&lt;configuration&gt;
&lt;system.web&gt; 
  &lt;httpHandlers&gt;
&lt;add verb=&quot;GET&quot; path=&quot;GetFile.aspx&quot; type=&quot;MyHttpHandler, MyAssembly&quot; /&gt; 
  &lt;/httpHandlers&gt; 
 &lt;/system.web&gt; 
&lt;/configuration&gt;
</pre></div><!--ForumCodeBoxEnd--><br />
При использовании приведенной выше информации, следует учитывать:<br />
<br />
<ol type="1"><li>Необходимопроверять имя файла в запросе.В приведенномпримере злоумышленник может использовать в запросе конструкции типа&quot;..\..\&quot; и, таким образом, потенциальную возможность получить несанкционированный доступ к ресурсам сервера.</li><li>Свойство Response.ContentType. Его значение зависит от того, что Высобираетесь передавать.</li><li>Необходимо обрабатывать исключения, связанные с открытием файла. Стоит подумать о размещении операторов работы с файломв using-блоке.</li><li>Следует учитывать размер данных передаваемых клиенту. В случае если размер значительный, стоит передавать данные не целиком, а частями.</li><li>Свойство IsReusable указывает среде исполнения на возможность повторного использования обработчиказапросов. То есть, когда придет следующий запрос, среда не будет создавать новый объект MyHttpHandler, а использует этот-же повторно.</li><li>Элемент&quot;httpHandlers/add&quot; добавляет обработчик HTTP-запросов. В данном случае все GET-запросы на файл GetFile.aspx будут перенаправляться указанному обработчику. И не важно, существует ли этот файл на самом деле.</li></ol><br />
&#169; Федор Сойкин (<noindex><a href="http://www.gotdotnet.ru/Forums/ASPNET/Users_ShowProfile.aspx?user=Name" rel="nofollow">Name</a></noindex>)]]></description>
      <author><![CDATA[Chavo]]></author>
      <category><![CDATA[FAQ по форуму ASP.NET]]></category>
      <guid isPermaLink="false">urn:bitrix:forum:post:588471</guid>
      <pubDate>Tue, 23 Dec 2003 11:36:33 UT</pubDate>
    </item>
    <item>
      <title><![CDATA[Re: FAQ по форуму ASP.NET]]></title>
      <link>http://www.gotdotnet.ru/forums/4/124761/588470/#post588470</link>
      <description><![CDATA[<span style="line-height: 100%; font-size: 14pt"><b>Вопрос</b></span><br />
<br />
ASP.NET 2.0 Как установить фокус на определенный элемент управления при загрузке aspx-страницы?<br />
<br />
<span style="line-height: 100%; font-size: 14pt"><b>Ответ</b></span><br />
<br />
В ASP.NET 2.0 для установки фокуса появился метод Page.SetFocus(Control control). На стороне клиента должен быть разрешен client-side<br />
scripting.<br />
<br />
В ASP.NET 1.x можно воспользоваться клиентским скриптом:<br />
<br />
<div class="forum-code-box"><pre class="xml">const string SET_FOCUS = &quot;&lt;script language=JavaScript&gt;document.all.IdOfControlToFocus.focus();&lt;/script&gt;&quot;;
RegisterStartupScript( &quot;myTextBox_setfocus&quot;, SET_FOCUS);</pre></div><!--ForumCodeBoxEnd--><br />
<br />
Вместо IdOfControlToFocus необходимо указать Id интересующего контрола.<br />
<br />
Небольшой <noindex><a href="http://www.beansoftware.com/ASP.NET-Tutorials/Focus-ASP.NET.aspx" rel="nofollow">обзор</a></noindex> способов установки фокуса.]]></description>
      <author><![CDATA[Chavo]]></author>
      <category><![CDATA[FAQ по форуму ASP.NET]]></category>
      <guid isPermaLink="false">urn:bitrix:forum:post:588470</guid>
      <pubDate>Tue, 23 Dec 2003 08:54:47 UT</pubDate>
    </item>
  </channel>
</rss>