<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ProgTips &#187; ASP.Net</title>
	<atom:link href="http://tips.naivist.net/category/net-pasaule/aspnet/feed/" rel="self" type="application/rss+xml" />
	<link>http://tips.naivist.net</link>
	<description>Kodējot radušās domeles</description>
	<lastBuildDate>Fri, 08 Jul 2011 11:17:00 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>cmdSave.Enabled = False</title>
		<link>http://tips.naivist.net/2006/01/11/disabled_buttons/</link>
		<comments>http://tips.naivist.net/2006/01/11/disabled_buttons/#comments</comments>
		<pubDate>Wed, 11 Jan 2006 12:26:03 +0000</pubDate>
		<dc:creator>Krišs Rauhvargers</dc:creator>
				<category><![CDATA[ASP.Net]]></category>

		<guid isPermaLink="false">http://naivist.net/tips/index.php/2006/01/11/disabled_buttons/</guid>
		<description><![CDATA[Nemaz nav prātīgi domāt, ka, ASP.Net kontrole (piemēram, poga), kas it kā ir &#8220;atspējota&#8221; (disabled, not enabled), patiesībā tāda ir. Vienīgais, ko patiesībā ASP.Net izdara, ir, ģenerējot HTML kodu, kontroles kodā ieraksta disabled=true. Taču, ja šo pogu klienta pusē atkal &#8220;iespējojam&#8221; (eneiblojam), piemēram, ar šāda te: javascript:( function(){ d=document; l=d.getElementsByTagName("INPUT"); for(var i=0;i&#60;l.length;i++){ l[i].disabled=false} }()) JavaScript [...]]]></description>
			<content:encoded><![CDATA[<p>Nemaz nav prātīgi domāt, ka, ASP.Net kontrole (piemēram, poga), kas it kā ir &#8220;atspējota&#8221; (disabled, not enabled), patiesībā tāda ir.
Vienīgais, ko patiesībā ASP.Net izdara, ir, ģenerējot HTML kodu, kontroles kodā ieraksta <code>disabled=true</code>.</p>

<p>Taču, ja šo pogu klienta pusē atkal &#8220;iespējojam&#8221; (<em>eneiblojam</em>), piemēram, ar šāda te: </p>

<pre><code>javascript:( 
    function(){
      d=document;
      l=d.getElementsByTagName("INPUT");
      for(var i=0;i&lt;l.length;i++){
         l[i].disabled=false}
 }())
</code></pre>

<p>JavaScript bookmarkleta palīdzību, ASP.Net neveiks nekādas servera puses pārbaudes, vai poga ir bijusi ieslēgta, vai nav. Tas jādara pašiem. Vislabāk nemaz nedot lietotājam rokās pogu, kuru nevar nospiest, bet, ja gribas saglabāt skaistu interfeisu, tad <code>cmdSave_Click(...)</code> kods jāpapildina ar pārbaudi, vai poga šobrīd vispār ir ieslēgta.</p>

<p>Paldies par uzmanību :-)</p>
]]></content:encoded>
			<wfw:commentRss>http://tips.naivist.net/2006/01/11/disabled_buttons/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Month names. i18n, you know</title>
		<link>http://tips.naivist.net/2005/09/26/month_names/</link>
		<comments>http://tips.naivist.net/2005/09/26/month_names/#comments</comments>
		<pubDate>Mon, 26 Sep 2005 13:44:26 +0000</pubDate>
		<dc:creator>Krišs Rauhvargers</dc:creator>
				<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[VB un .net]]></category>

		<guid isPermaLink="false">http://naivist.net/tips/index.php/2005/09/26/month-names-i18n-you-know/</guid>
		<description><![CDATA[Whenever you see something like this you should come to an idea something is wrong (for instance, the guy who wrote this is still alive): 'month names in Latvian Dim sMonth() As String = _ {"Janvāris", "Februāris", "Marts", "Aprīlis", _ "Maijs", "Jūnijs", "Jūlijs", "Augusts", _ "Septembris", "Oktobris", "Novembris", "Decembris"} Dim oListItem as ListItem For iMonth [...]]]></description>
			<content:encoded><![CDATA[<p>Whenever you see something like this you should come to an idea something is wrong (for instance, the guy who wrote this is still alive):</p>

<pre><code>'month names in Latvian
Dim sMonth() As String = _
            {"Janvāris", "Februāris", "Marts", "Aprīlis", _
            "Maijs", "Jūnijs", "Jūlijs", "Augusts", _
            "Septembris", "Oktobris", "Novembris", "Decembris"}

Dim oListItem as ListItem
For iMonth as Integer = 1 To 12
  oListItem = New ListItem(sMonth(iMonth-1),  iMonth.ToString())
  Me.lstYears.Items.Add(oListItem)
Next
</code></pre>

<p>Explanation &#8211; if MS Windows knows quite well how months are named in Latvia, why should you try to be smarter than <em>the big brother</em>? Another explanation &#8211; if this is a web project (and in my case it is), you should think of internationalization whenever possible. </p>

<p>So a more correct way to add month names to a dropdown menu is:</p>

<pre><code>Imports System.Globalization
....
Dim oListItem as ListItem
For iMonth As Integer = 0 To 11
   oEntry = New Web.UI.WebControls.ListItem( _
         CultureInfo.CurrentUICulture.DateTimeFormat.MonthNames(iMonth), _
            iMonth.ToString)
   Me.lstMonths.Items.Add(oEntry)
Next
</code></pre>

<p>And, to be even more precise, you could first check how many months there are in the current culture:</p>

<pre><code>For iMonth As Integer = 0 To _
                CultureInfo. CurrentUICulture.Calendar. _ 
                GetMonthsInYear(Now.Year) - 1
    ....
</code></pre>

<p>/Just trying to be a good boy and use the facilities provided by the framework/</p>
]]></content:encoded>
			<wfw:commentRss>http://tips.naivist.net/2005/09/26/month_names/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ASP.Net pāradresācijas un kļūdu apstrāde</title>
		<link>http://tips.naivist.net/2005/08/02/aspnet_redirects/</link>
		<comments>http://tips.naivist.net/2005/08/02/aspnet_redirects/#comments</comments>
		<pubDate>Tue, 02 Aug 2005 07:45:03 +0000</pubDate>
		<dc:creator>Krišs Rauhvargers</dc:creator>
				<category><![CDATA[ASP.Net]]></category>

		<guid isPermaLink="false">http://naivist.net/tips/index.php/2005/08/02/aspnet-p%c4%81radres%c4%81cijas/</guid>
		<description><![CDATA[ASP.Net, kaut gan tā lapas paredzētas darbam kā notikumu bāzētas web formas, spēj strādāt arī ar vienkāršiem HTTP jēdzieniem, piemēram, HTTP headeriem. Viens no populāriem headerim ir Location, kura semantiskā jēga ir paziņojums HTTP aģentam (pārlūkprogrammai) &#8220;pārtrauc šī dokumenta apstrādi un pieprasi tā vietā šo te dokumentu!&#8221; ASP.Net šāda iespēja ir pieejama, lietojot Response objekta [...]]]></description>
			<content:encoded><![CDATA[<p><em>ASP.Net</em>, kaut gan tā lapas paredzētas darbam kā notikumu bāzētas <em>web formas</em>, spēj strādāt arī ar vienkāršiem HTTP jēdzieniem, piemēram, <a href="http://msdn.microsoft.com/workshop/author/dhtml/reference/constants/response_headers.asp" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/workshop/author/dhtml/reference/constants/response_headers.asp?referer=');"><em>HTTP headeriem</em></a>. Viens no populāriem <em>headerim</em> ir <code>Location</code>, kura semantiskā jēga ir paziņojums HTTP aģentam (pārlūkprogrammai) &#8220;pārtrauc šī dokumenta apstrādi un pieprasi tā vietā šo te dokumentu!&#8221;</p>

<p><em>ASP.Net</em> šāda iespēja ir pieejama, lietojot <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebhttpresponseclasstopic.asp" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebhttpresponseclasstopic.asp&amp;referer=');"><code>Response</code></a> objekta <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebhttpresponseclassredirecttopic.asp" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebhttpresponseclassredirecttopic.asp&amp;referer=');"><code>Redirect()</code></a> metodi. Piemēram, </p>

<pre><code>If booleanNosacijums Then
       Response.Redirect("http://naivist.net")
End If
</code></pre>

<p>Ja vien <code>Redirect()</code> metodei netiek speciāli norādīts, ka otrā neobligātā parametra <code>EndResponse</code> vērtība ir <code>False</code>, šajā brīdī notiek sekojošais:</p>

<ul>
<li>lietotājam tiek nosūtīts HTTP <em>headeris</em> Location:http://naivist.net</li>
<li><em>ASP.Net</em> iekšienē tiek mesta System.Threading.ThreadAbortException kļūda, kuru pārķer <em>.Net runtime</em> un aptur pašreiz izpildāmā pavediena darbību. </li>
</ul>

<p>Šāds darbības princips garantē to, ka pēc pāradresācijas <em>headera</em> nosūtīšanas tālākais kods neizpildīsies. Ja pavediens netiktu apturēts, izpildītos citi notikumu apstrādes koda fragmenti rezultāti tiktu nosūtīti klientam pēc pāradresācijas <em>headera</em> (kur lietotājs to vienala uz ekrāna neredzētu).</p>

<p>Kā zināms, labi programmētāji lieto strukturēto kļūdu apstrādi. Piemēram, faila dzēšanu ievieto <code>Try-Catch</code> blokā.  Ja failu neizdosies nodzēst, kodā notiks ar kļūda, kas tiks noķerta <code>Catch</code> blokā. Ja failu izdosies nodzēst, pēc dzēšanas pāradresēsimies uz citu lapu.</p>

<pre><code>    Try
        Dim oFile As New IO.FileInfo("c:\temp\fails.txt")
        oFile.Delete()
        Response.Redirect("failsLabiNodzests.aspx")
    Catch ex As Exception
        Me.lblInfo.Text="Nav izdevies nodzēst failu"
       System.Diagnostics.EventLog.WriteEntry("MyApp",  _
                                      "Kļūda dzēšot failu", EventLogEntryType.Error)
    End Try
</code></pre>

<p>Tomēr šāds kods nestrādās īsti korekti, jo arī pie veiksmīgas faila dzēšanas izpildīsies <code>Catch</code> bloks, noķerot <code>ThreadAbortException</code> kļūdu. Līdz ar to EventLog parādīsies nekorekta informācija.</p>

<p>Viens no veidiem, kā novērst problēmu, ir vispirms ķert specifisko <code>ThreadAbortException</code> kļūdu un tikai tad apstrādāt pārējās: </p>

<pre><code>    Catch ex As Threading.ThreadAbortException
        Throw ex
    Catch ex As Exception 
    ...
</code></pre>

<p>Šāds veids ir funkcionāls, bet nav elegants, jo kļūda tiek ķerta un pārmesta vēlreiz &#8211; neglīti. Lietojot Visual Basic .Net specifisko kļūdu apstrādes principu, kodu var padarīt elegantāku:</p>

<pre><code>    Catch ex As Exception When _
        Not TypeOf (ex) Is Threading.ThreadAbortException
        Me.lblInfo.Text="Nav izdevies nodzēst failu"
   ...
</code></pre>

<p>Tagad tiek ķertas tikai tās kļūdas, kuru tips nav <code>ThreadAbortException</code>, kas arī bija jāpanāk.
<code>When</code> nosacījumā drīkst ierakstīt jebkādu nosacījumu, kura izpildes rezultāts ir <code>Boolean</code> tipa. Ir iespējams izmantot arī kodā definētu mainīgo vērtības, ar nosacījumu, ka mainīgais ir redzamības apgabalā (variable scope).</p>
]]></content:encoded>
			<wfw:commentRss>http://tips.naivist.net/2005/08/02/aspnet_redirects/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ASP.NET features &#8211; ViewState</title>
		<link>http://tips.naivist.net/2005/06/27/aspnet_viewstate/</link>
		<comments>http://tips.naivist.net/2005/06/27/aspnet_viewstate/#comments</comments>
		<pubDate>Mon, 27 Jun 2005 15:04:00 +0000</pubDate>
		<dc:creator>Krišs Rauhvargers</dc:creator>
				<category><![CDATA[ASP.Net]]></category>

		<guid isPermaLink="false">http://naivist.net/tips/index.php/2005/06/08/aspnet-features-viewstate/</guid>
		<description><![CDATA[Solīts ir un paliek solīts &#8211; rakstām par ASP.Net atribūtiku. Šoreiz &#8211; par ViewState. Jau iepriekš pieņemu, ka lasītājs ir iepazinies ar rakstu par ASP.Net pamatiem un par ASP.Net koda izpildes modeli Īsumā, kas ir ViewState: veids, kā ASP.Net uzglabā informāciju par WebFormas stāvokli, informāciju nesaglabājot sesijas mainīgajos izstrādātājam &#8211; datu masīvs, kurā var ievietot [...]]]></description>
			<content:encoded><![CDATA[<p>Solīts ir un paliek solīts &#8211; rakstām par <em>ASP.Net</em> atribūtiku. Šoreiz &#8211; par <em>ViewState</em>.<br />
Jau iepriekš pieņemu, ka lasītājs ir iepazinies ar rakstu par <a href="http://naivist.net/tips/index.php/2005/06/08/aspnet_intro/" onclick="pageTracker._trackPageview('/outgoing/naivist.net/tips/index.php/2005/06/08/aspnet_intro/?referer=');"><em>ASP.Net</em> pamatiem</a> un par <a href="http://naivist.net/tips/index.php/2005/06/09/aspnet_code_model/" onclick="pageTracker._trackPageview('/outgoing/naivist.net/tips/index.php/2005/06/09/aspnet_code_model/?referer=');"><em>ASP.Net</em> koda izpildes modeli</a></p>

<p>Īsumā, kas ir <em>ViewState</em>:</p>

<ul>
<li>veids, kā <em>ASP.Net</em> uzglabā informāciju par <em>WebFormas</em> stāvokli, informāciju nesaglabājot sesijas mainīgajos</li>
<li>izstrādātājam &#8211; datu masīvs, kurā var ievietot datus un tos nolasīt neatkarīgi no <em>WebFormas</em> dzīves cikla. Tāpat arī &#8211; iespēja vienu reizi dinamiski uzstādīt kādas kontroles kādu atribūtu un pēc tam ļaut par atribūta vērtību <em>parūpēties</em> pašam <em>ASP.Net</em></li>
<li>pārlūkprogrammai &#8211; burtu virknīte, <em>hidden</em> lauks HTML dokumentā, kas jāpārsūta atpakaļ serverim.</li>
</ul>

<p>Vēlreiz parunāsim par <em>ASP.Net</em> <em>WebFormu</em> dzīves ciklu. Piemēram, esam atvēruši lapu <em>http://localhost/default.aspx</em> Šajā lapā ir viens teksta ievades lauks <code>txtName</code> un viena poga. Nospiežot pogu, tiek izpildīta HTTP POST operācija, datus atkal pārsūtot uz <em>http://localhost/default.aspx</em>, tas ir, lapa tos pārsūta &#8220;pati uz sevi&#8221;. Saņemtos datus apstrādā <em>ASP.Net</em>, ģenerē atjaunotu <em>WebFormas</em> izskatu un to nosūta uz pārlūku. </p>

<p>Saņemtajos formas POST datos parādās lauka <code>txtName</code> vērtība, kādu to ir ievadījis vai izmainījis lietotājs.  Taču, lai varētu korekti apstrādāt lauka vērtības izmaiņas, nepieciešams salīdzināt šī lauka vērtību pirms to ļāva lietotājam mainīt un tad, kad saņemtas lietotāja veiktās izmaiņas, tas ir, nepieciešams zināt, kāda bija lauka vērtība, kad lapa iepriekšējo reizi tika sūtīta lietotājam.  Tieši šādam mērķim arī kalpo <em>ViewState</em> &#8211; tajā ir atrodamas dažādu informācijas lauku &#8220;vecās versijas&#8221;. Tādējādi <em>ASP.Net</em>, procesējot lapu <em>http://localhost/default.aspx</em>, var salīdzināt, ka šobrīd aktuālā <code>txtName</code> vērtība ir &#8220;ArčibaldsKronins&#8221;, taču pēc <em>ViewState</em> datiem laukā <code>txtName</code> bijis ierakstīts &#8220;VitālijsMētra&#8221; un, pamatojoties uz to, apstrādāt <code>txtName_TextChanged</code> notikumu.</p>

<p>Jāatzīmē, ka katra lapas kontrole var <em>ViewState</em> saglabāt dažādus savus atribūtus. Piemēram, visas klases, kas mantotas no <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebUIWebControlsWebControlClassTopic.asp" title="Par WebControl no MSDN" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebUIWebControlsWebControlClassTopic.asp&amp;referer=');">Web.UI.WebControls.WebControl</a> klases, <em>ViewState</em> informācijā saglabā Enabled, AccessKey, TabIndex, ToolTip, Visible un papildus tam vēl specifiski kontrolei piemītošas īpašības, piemēram, <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebuiwebcontrolslabelclasstopic.asp" title="Par Label no MSDN" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebuiwebcontrolslabelclasstopic.asp&amp;referer=');">Web.UI.WebControls.Label</a> papildus tam saglabā arī Text atribūtu. </p>

<p>To, vai kāda ekrāna kontrole vispār saglabā savus datus <em>ViewState</em> vai nē, nosaka no System.Web.UI.Control klases mantotā atribūta EnableViewState vērtība.  Ja <code>EnableViewState=False</code>, kontrole savu informāciju <em>ViewState</em> datos nesaglabā. Ja <code>True</code>, saglabā visu šim tipam atbilstošo informāciju (bieži vien pat par daudz). Par to, kā samazināt <em>ViewState</em> apjomu, <a href="http://www.google.lv/search?q=viewstate+minimize" title="Google rezultāti" onclick="pageTracker._trackPageview('/outgoing/www.google.lv/search?q=viewstate+minimize&amp;referer=');">raksta daudzi</a>, ir vērts iepazīties ar Microsoft <a href="http://msdn.microsoft.com/msdnmag/issues/03/04/ASPNETUserState/" title="Nine Options for Managing Persistent User State in Your ASP.NET Application" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/msdnmag/issues/03/04/ASPNETUserState/?referer=');">ieteikumiem aplikācijas stāvokļa saglabāšanai</a>.</p>

<p>Lai saprastu tālāk, jāpaskatās, kā izskatās <em>ViewState</em> dati no HTML viedokļa. Tas ir slēpts datu lauks, kura vērtība apstrādāta ar <a href="http://en.wikipedia.org/wiki/Base64" title="No Wikipedia par Base64" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Base64?referer=');">Base-64</a> algoritmu</p>

<pre><code>&lt; input type="hidden" 
name="__VIEWSTATE" 
value="dDw5NDE3OTg0NzE7Oz6gEYYV9S+G2OiSz/XslX9Ha+7t5Q==" /&gt;
</code></pre>

<p>Atkodējot datus, var <a href="http://dotnetjunkies.com/WebLog/grant.killian/archive/2003/10/20/2737.aspx" title="Kā atkodējams ViewState" onclick="pageTracker._trackPageview('/outgoing/dotnetjunkies.com/WebLog/grant.killian/archive/2003/10/20/2737.aspx?referer=');">iegūt pa pusei lasāmu datu virkni</a>, kas satur informāciju par visām kontrolēm, kas izmanto <em>ViewState</em>.  Piemēram, manis demonstrētais ViewState ir atkodējams uz šādu <code>t&lt;941798471;;&gt; †õ/†Ųč’Ļõģ•Gkīķå</code>.  Nav sevišķi izteiksmīgs teksts, taču dators saprot. Pēdējie baiti ir informācija pašam <em>ASP.Net</em>, lai varētu pārbaudīt, vai dati nav modificēti pēc nosūtīšanas klientam, pirmie &#8211; satur svarīgo informāciju par ekrāna kontroļu atribūtiem.</p>

<p>Kā redzams no atkodētajiem datiem, <em>ViewState</em>  saglabātā informācija nav piekārtota ekrāna kontrolēm pēc to identifikatoriem vai nosaukumiem, bet gan pēc <em>secības</em>, kādā kontroles novietotas lapā. Tieši šī iemesla dēļ ir svarīgi, ka ekrāna kontroļu kolekcija nav tikusi mainīta kopš iepriekšējās lapas ielādes.<br />
Ja atšķiras kontroļu skaits vai tips, <em>ASP.Net</em> ģenerēs kļūdas paziņojumu par nekorektiem <em>ViewState</em> datiem. Šī īpatnība nerada problēmas gadījumā, kad visas ekrāna kontroles ir sagatavotas <em>.aspx</em> lapā un kontroļu kolekcija ir nemainīga visā <em>WebFormas</em> dzīves laikā, bet problēma aktualizējas brīdī, kad kontroles tiek pievienotas lapai dinamiski. </p>

<p>Piemēram, ja veidosim <em>WebFormu</em>, kas parāda uz ekrāna kāda faila <a href="http://en.wikipedia.org/wiki/EXIF" title="EXIF - papilddati attēliem" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/EXIF?referer=');">EXIF</a> atribūtus un gribēsim ļaut tos visus vienlaicīgi mainīt uz ekrāna &#8211; katram EXIF laukam būs jāveido atsevišķa TextBox kontrole, kurā jāparāda esošā vērtība un jāļauj ievadīt citus datus. Tādējādi šo formu nevarēs sagatavot jau iepriekš un kontroļu skaits būs atšķirīgs.</p>

<p>Līdz ar to, lai pirmo reizi parādītu visus EXIF laukus, veidosim jaunu TextBox objektu:</p>

<pre><code>    Dim oTxt As New Web.UI.WebControls.TextBox
    oTxt.ID = "txtResolution"
    oTxt.Text = oSomeObj.Resolution 'šis ir objekts, no kura "lasām" EXIF datus
</code></pre>

<p>un pievienosim šo objektu ekrāna kontroļu kolekcijai ar kodu <code>Page.Controls.Add(oTxt)</code>.<br />
Taču nākamajā lapas ielādes reizē, kad gribēsim izmantot <em>ViewState</em> datus, mums jāizveido attiecīgais TextBox objekts un jāļauj tam <em>patstāvīgi</em> nolasīt savu vērtību no ViewState. Objekta veidošanu ierakstām <code>Page_Load</code> metodē, kas izpildās pirms <em>ViewState</em> datu lasīšanas:</p>

<pre><code>Private Sub Page_Load _
            (ByVal s As System.Object, ByVal e As System.EventArgs) _
             Handles MyBase.Load
    'izņemot gadījumu, ja lapa ielādējas pirmo reizi - tad jāizpilda augstāk aprakstītā procedūra
    If Not Page.IsPostBack() Then
        Dim oTxt As New Web.UI.WebControls.TextBox
        oTxt.ID = "txtResolution"
    Else
        'izsaukums uz augstāk aprakstīto procedūru, kas nolasa datus no paša faila
    End If
End Sub
</code></pre>

<p>Jādomā, ka problēma šeit jau ir <em>jūtama</em> &#8211; kā zināt, kā saucas ekrāna kontroles, kas jāveido, lai tās pašas no sevis nolasītu datus. Piemērā esmu izmantojis nosaukumu &#8220;txtResolution&#8221;, jo pieņemu, ka gandrīz katrā EXIF galvenē būs dati par attēla izšķirtspēju, taču ko darīt, ja datus ielādējam patiešām dinamiski? </p>

<p>Viens no risinājumiem (apkārtceļiem, protams), kādu esmu lietojis, ir &#8211; savākt visu pirmajā reizē izveidoto kontroļu ID-us vienā garā String tipa mainīgajā, atdalītā, piemēram ar &#8220;#&#8221; simboliem. Un, kad dinamiskā ģenerēšana beigusies, šo String noglabāt turpat <em>ViewState</em> datos: </p>

<pre><code>Viewstate.Add("ControlNames", sControlNames)
</code></pre>

<p>Pēc tam, nākamo reizi ielādējot lapu, pārbaudām, vai <em>ViewState</em> satur mainīgo <code>ControlNames</code>.  Ja satur &#8211; sadalām šo String pa atsevišķiem nosaukumiem, analizējam nosaukumus, pēc analīzes rezultātiem veidojam kontroles. Piemēram, no šāda te <code>ControlNames</code> satura &#8211; &#8220;txtResolution#chkMakePublic&#8221; var secināt, ka jāveido teksta ievades lauks ar nosaukumu <code>txtResolution</code> un ķekškaste ar nosaukumu <code>chkMakePublic</code>.</p>

<p>Kāpēc jālieto šāds apkārtceļš? Lai atkārtoti nelasītu datus no paša faila (pieņemsim, ka fiziskā faila atribūtu lasīšana ir resursietilpīga procedūra). Ja datus varam atkārtoti lasīt no paša faila, nav nepieciešams izmantot <em>ViewState</em>, jo var vienkārši salīdzināt lietotāja piesūtītos datus ar oriģinālajiem.</p>

<p>Ja pieļaujams darbam izmantot <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebsessionstate.asp" title="Par SessionState no MSDN" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebsessionstate.asp&amp;referer=');">SessionState</a> datus jeb &#8220;sesijas mainīgos&#8221;, lielu daļu no <em>ViewState</em> var pārcelt uz <em>SessionState</em>, tādējādi atslogojot klienta-servera saziņas datu kanālu, bet vairāk noslogojot serveri.</p>

<p>Jāatceras, ka daudzas no Microsoft piedāvātajām datu ievades kontrolēm strādās jocīgi vai nestrādās nemaz, ja <em>ViewState</em> tām būs izslēgts. Piemēram, ļoti ērtā <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebUIWebControlsDataGridClassTopic.asp" title="Par dataGrid no MSDN" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebUIWebControlsDataGridClassTopic.asp&amp;referer=');">DataGrid</a> kontrole intensīvi izmanto <em>ViewState</em> un pie izslēgta <em>ViewState</em> darbojas slikti. Taču tieši šī kontrole saglabā ļoti daudz datu <em>ViewState</em> masīvā. No tā varam viegli secināt, ka <em>ViewState</em>  būs labs risinājums gadījumos, kad klienta-servera komunikācija ir viegla un saziņas kanāls ir plats (piemēram, iekšējā tīkla risinājumos), bet ar to jāuzmanās tad, kad datu plūsmas apjoms ir svarīgs.</p>

<p>Starp citu &#8211; <em>ViewState</em> datos var saglabāt, šķiet, jebkuru objektu, kas atbalsta <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemruntimeserializationiserializableclasstopic.asp" title="Par ISerializable no MSDN" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemruntimeserializationiserializableclasstopic.asp&amp;referer=');">ISerializable interfeisu</a>, piemēram, <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdatadatasetclasstopic.asp" title="Par DataSet no MSDN" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdatadatasetclasstopic.asp&amp;referer=');">DataSet</a>, taču ļoti jāuzmanās, vai dotais datu tips netiek serializēts nejēdzīgi lielā bināru datu virknē.</p>
]]></content:encoded>
			<wfw:commentRss>http://tips.naivist.net/2005/06/27/aspnet_viewstate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET koda modelis</title>
		<link>http://tips.naivist.net/2005/06/09/aspnet_code_model/</link>
		<comments>http://tips.naivist.net/2005/06/09/aspnet_code_model/#comments</comments>
		<pubDate>Thu, 09 Jun 2005 15:48:19 +0000</pubDate>
		<dc:creator>Krišs Rauhvargers</dc:creator>
				<category><![CDATA[ASP.Net]]></category>

		<guid isPermaLink="false">http://naivist.net/tips/index.php/2005/06/08/aspnet_code_model/</guid>
		<description><![CDATA[Šajā rakstā tiek pieņemts, ka lasītājs ir iepazinies ar ievadrakstu par ASP.Net Šis ir īss izklāsts latviešu valodā no MSDN izklāsta par ASP.Net koda modeli ASP.Net koda modelis ir viens no pirmajiem soļiem pretim Longhorn paredzēto aplikāciju izstrādes tehnikai, kur aplikācijas izskats tiek nodalīts no koda, kas apstrādā notikumus. Tādējādi &#8220;layouts&#8221; un &#8220;eventi&#8221; ir koda [...]]]></description>
			<content:encoded><![CDATA[<p>Šajā rakstā tiek pieņemts, ka lasītājs ir iepazinies ar <a href="http://naivist.net/tips/index.php/2005/06/08/aspnet_intro/" onclick="pageTracker._trackPageview('/outgoing/naivist.net/tips/index.php/2005/06/08/aspnet_intro/?referer=');">ievadrakstu par <em>ASP.Net</em></a></p>

<p>Šis ir īss izklāsts latviešu valodā no <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbconwebformscodemodel.asp" title="Par koda modeli no MSDN" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vbconwebformscodemodel.asp&amp;referer=');">MSDN izklāsta par <em>ASP.Net</em> koda modeli</a></p>

<p><em>ASP.Net</em> koda modelis ir viens no pirmajiem soļiem pretim Longhorn paredzēto aplikāciju <a href="http://msdn.microsoft.com/msdnmag/issues/04/01/DevelopingAppsforLonghorn/default.aspx" title="Par Longhorn un XAML" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/msdnmag/issues/04/01/DevelopingAppsforLonghorn/default.aspx?referer=');">izstrādes tehnikai</a>, kur aplikācijas izskats tiek nodalīts no koda, kas apstrādā notikumus. Tādējādi &#8220;layouts&#8221; un &#8220;eventi&#8221; ir koda ziņā divi dažādi faili, kuru saturs aplikācijas izpildes laikā tiek ar &#8220;maģiskās mērces&#8221; palīdzību saķibināts vienotā baitu plūsmā.<br />
Būtībā tiek risināta problēma, kuras dēļ, piemēram PHP skriptu gadījumā radīti tādi &#8220;template dzinēji&#8221; kā <a href="http://smarty.php.net" title="Smarty mājas" onclick="pageTracker._trackPageview('/outgoing/smarty.php.net?referer=');">Smarty</a>, tikai šeit problēmas risinājums iešūts pašā dzinējā.</p>

<p><em>ASP.Net</em> lapas pamatā vienmēr būs koda klase <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemwebuipageclasstopic.asp" title="MSDN informācija par Page klasi" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemwebuipageclasstopic.asp?referer=');">System.Web.UI.Page</a>. Šajā klasē implementētas visas darbam pamatā nepieciešamās metodes (piemēram, RenderControl, Validate un citas), pieejamas datu kolekcijas un svarīgākie objekti, kas atbalsta HTTP ideoloģiju(piemēram <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemwebhttprequestclasstopic.asp" title="Par HTTPRequest objektu no MSDN" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemwebhttprequestclasstopic.asp?referer=');">Request</a>, <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemwebhttpresponseclasstopic.asp" title="Par WebResponse objektu no MSDN" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemwebhttpresponseclasstopic.asp?referer=');">Response</a>, <a href="http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemwebuicontrolclassviewstatetopic.asp" title="Par ViewState no MSDN" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemwebuicontrolclassviewstatetopic.asp?referer=');">ViewState</a>), klase realizē pietiekami sarežģītu notikumu modeli (pieejami notikumi, piemēram Init, Load, PreRender, DataBinding un citi)</p>

<p>Sākot veidot jaunu <em>ASP.Net</em> lapu, jāveido klase, kas mantota no Page klases. Tas ir, ja vēlamies izveidot primitīvu webformu uz kuras varētu atrasties viens nerediģējama teksta klucītis, kods ir šāds:</p>

<pre><code>Public Class MyPage
    Inherits Web.UI.Page
    Protected MyLabel As Web.UI.WebControls.Label
End Class
</code></pre>

<p>Failu, kas satur šādu klasi, iespējams kompilēt, lietojot parasto Visual  Basic.net <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vblr7/html/vaoriVisualBasicCompilerOptions.asp" title="Par VBC.exe" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/library/default.asp?url=/library/en-us/vblr7/html/vaoriVisualBasicCompilerOptions.asp&amp;referer=');">kompilatoru <em>vbc.exe</em></a> un rezultātā iegūt &#42;.dll failu, ko dēvē par <em>code-behind</em> bibliotēku. </p>

<p>Viegli pamanīt, ka iepriekš minētajā kodā nav informācijas par to, kāds izskatīsies Label objekts. WebFormas vizualizācija tiek veidota kā atsevišķs fails, kura paplašinājums parasti ir &#42;<em>.aspx</em>. Šāda faila pirmā rinda ir norāde interpretatoram, kur meklēt no kādas klases <em>mantota</em> dotā webforma:</p>

<pre><code>&lt; %@ Page Language="vb" AutoEventWireup="false" Inherits="MyApp.MyPage"%&gt;
</code></pre>

<p>Mazliet īpatnēji šajā kontekstā šķiet izmantot terminu <em>mantošana</em>, jo šādi sanāk, ka teksta fails manto koda klasi, bet tā to dēvēt izvēlējušies tehnoloģijas arhitekti. Ir iespējams vienai koda klasei piekārtot vairākas izskata lapas, bet ne otrādi.</p>

<p>Webformas <em>layout</em> fails tiek veidots kā HTML un ASP iezīmju maisījums, lietojot speciālas birkas kontroļu ievietošanai. Mūsu piemērs izskatās šādi (atvainojiet par liekajām atstarpēm birku sākumā, ir nelielas problēmas ar manu publicēšanas sistēmu): </p>

<pre><code>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;
&lt;HTML&gt;
  &lt;body&gt;
  &lt;form id="Form1" method="post" runat="server"&gt;
    &lt;asp:Label id="MyLabel" runat="server"&gt;&lt;/asp:Label&gt;
  &lt;/form&gt;
  &lt;/body&gt;
&lt;/HTML&gt;
</code></pre>

<p>Šeit svarīgi ir tas, ka <code>asp:Label</code> ID atribūts sakrīt ar MyPage koda klases atribūta nosaukumu. Šādā veidā webformas lietotāja interfeisa kontrole tiek piesaistīta kodam, kas ar to darbojas. Ja <em>ASP.Net</em> lapa tiek veidota ar MS Visual Studio .Net, formas kontroļu saderību ar klases atribūtiem tiek nodrošināta automātiski.</p>

<p>Kas tad notiek tālāk. Rezultātā esam ieguvuši divus atsevišķus failus &#8211; <em>mypage.aspx</em>, kur definēts lapas izskats un <em>myapp.dll</em>, kurā implementētas lapas loģika. Izveidojam Internet Information Server pieejamu direktoriju uz cietā diska, piemēram, <em>c:\inetpub\wwwroot\myapp&#92;</em>. Direktorijā ievietojam tikai <em>.aspx</em> failu un izveidojam papildus apakšdirektoriju <em>bin</em>, kurā ievietojam <em>.dll</em> failu. </p>

<p>IIS konfigurācijā izveidojam jaunu aplikāciju direktorijai <em>c:\inetpub\wwwroot\myapp&#92;</em> <a href="http://www.iisworks.com/faq/kb.asp?a=show&amp;ID=164" title="Instrukcija" onclick="pageTracker._trackPageview('/outgoing/www.iisworks.com/faq/kb.asp?a=show_amp_ID=164&amp;referer=');">(kā to izdarīt)</a>.<br />
Šajā brīdī IIS zina, ka visi <em>.aspx</em> faili, kas atrodas šajā direktorijā, turpmāk jāapstrādā ar <em>ASP.Net</em> <a href="http://msdn.microsoft.com/library/en-us/vccore98/html/_core_internet_server_api_.28.isapi.29_.extensions.asp" title="Kas ir ISAPI" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/library/en-us/vccore98/html/_core_internet_server_api_.28.isapi.29_.extensions.asp?referer=');">ISAPI filtru</a> jeb interpretatoru, kas tiks ielādēts no C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet_isapi.dll (Tā arī tā manis minētā *maģiskā mērce*).</p>

<p>Kad lietotājs pieslēdzas tīmekļa serverim un pieprasa mūsu izstrādāto lapu (<em>http://localhost/myapp/mypage.aspx</em>) , IIS process sevī ielādē (ja vēl nav ielādējis) <em>aspnet_isapi.dll</em> bibliotēku un tai palūdz procesēt lapu <em>mypage.aspx</em>. Interpretators noskaidro, ka <em>mypage.aspx</em> ir mantota no koda klases <em>MyPage</em>, kas atrodama bibliotēkā <em>myapp.dll</em>. Rezultātā IIS procesā tiek ielādēta arī <em>myapp.dll</em> bibliotēka&#8217;. Tālāk tiek izpildīts kods, kas galu galā atgriež rezultātu IIS procesam, kurš to nodod atpakaļ lietotājam.</p>

<p>Koda izpildes laikā lapa &#8216;izdzīvo&#8217; savudzīves ciklu. Lai imitētu Windows formas darba stilu, tiek veiktas daudzas lietotājam nezināmas darbības, piemēram, lapā saliktas datu ievades kontroles, to vērtības atjaunotas uz sākotnējām vai tādām, uz kādām lietotājs tās pamainījis pirms kādas pogas nospiešanas, tiek apstrādāti notikumi kā &#8220;nospiesta poga A&#8221; vai &#8220;nomainījies izvēlētais ieraksts listboxī&#8221; un citi.</p>

<p>Skaists un pilnīgs lapas dzīves cikla apraksts atrodams <a href="http://www.15seconds.com/issue/020102.htm" title="The ASP.NET Page Life Cycle" onclick="pageTracker._trackPageview('/outgoing/www.15seconds.com/issue/020102.htm?referer=');">15Seconds rakstā</a>, bet īsumā, kas notiek:</p>

<ul>
<li>Objektu un kontroļu inicializēšana</li>
<li>ViewState datu atjaunošana (par šo stāstīšu nākamajā rakstā)</li>
<li>PostBack datu apstrāde- tas, ko lietotājs ir pamainījis formā</li>
<li>Tiek pacelti izmaiņu notikumi (onclick, onselectedindexchanged etc)</li>
<li>Tiek ģenerēts HTML</li>
<li>Tiek ģenerēts jaunais ViewState</li>
</ul>

<p>Pēc tam lietotājs atkal kaut ko pamaina WebFormā, katra darbība pārsūta datus uz serveri, un atkal notiek šāda pat procedūra. Tādējādi jebkuras pogas nospiešana patiesībā pārsūta datus atkārtoti uz serveri, tur tiek apstrādāts šīs pogas <code>onClick</code> notikums un ģenerēts jauns, droši vien jau citāds HTML kods. Visu tekstu ievades lauku dati saglabājas, jo arī tie tiek pārsūtīti uz serveri, bet, atšķirībā no PHP aplikācijām, izstrādātājam ne obligāti būs jārūpējas par to, lai no POST (vai GET) datiem atjaunotu ievades lauka stāvokli &#8211; to izdarīs <em>ASP.net</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://tips.naivist.net/2005/06/09/aspnet_code_model/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.Net &#8211; sākumam</title>
		<link>http://tips.naivist.net/2005/06/09/aspnet_intro/</link>
		<comments>http://tips.naivist.net/2005/06/09/aspnet_intro/#comments</comments>
		<pubDate>Thu, 09 Jun 2005 15:47:56 +0000</pubDate>
		<dc:creator>Krišs Rauhvargers</dc:creator>
				<category><![CDATA[ASP.Net]]></category>

		<guid isPermaLink="false">http://naivist.net/tips/index.php/2005/06/08/aspnet_intro/</guid>
		<description><![CDATA[Ir tāds bieži dzirdēts vārds ASP.Net, ko katrs saprot pa savam. Cits uzskata, ka tā ir programmēšanas valoda (patiesībā nav vis), cits tajā saskata tālāku attīstību no Microsoft Active Server Pages (un tā arī ir), cits atzīst par nopietni apskatāmu kandidatūru web aplikācijas risinājumiem (līdzvērtīgu PHP vai ColdFusion), cits spēj vien kārtējo reizi nospļaudīties &#8220;Ak, [...]]]></description>
			<content:encoded><![CDATA[<p>Ir tāds bieži dzirdēts vārds <em>ASP.Net</em>, ko katrs saprot pa savam. Cits uzskata, ka tā ir programmēšanas valoda (patiesībā nav vis), cits tajā saskata tālāku attīstību no <a href="http://www.microsoft.com/windows2000/en/server/iis/htm/asp/iiwawelc.htm" title="Info par 'veco ASP'" onclick="pageTracker._trackPageview('/outgoing/www.microsoft.com/windows2000/en/server/iis/htm/asp/iiwawelc.htm?referer=');">Microsoft Active Server Pages</a> (un tā arī ir), cits atzīst par nopietni apskatāmu kandidatūru web aplikācijas risinājumiem (līdzvērtīgu <a href="http://lv.php.net" title="PHP mājas" onclick="pageTracker._trackPageview('/outgoing/lv.php.net?referer=');">PHP</a> vai <a href="http://www.macromedia.com/software/coldfusion/" title="Macromedia projekts ColdFusion" onclick="pageTracker._trackPageview('/outgoing/www.macromedia.com/software/coldfusion/?referer=');">ColdFusion</a>), cits spēj vien kārtējo reizi <em>nospļaudīties</em> &#8220;Ak, tas [pīiii] maikrosofts&#8221;.</p>

<p>Iegūstot zināmu darba pieredzi ar <em>ASP.Net</em> tehnoloģiju, esmu sapratis, ka tas patiešām ir sava veida turpinājums &#8220;vecajam ASP&#8221;, kas veidots tā, lai tīmekļa aplikāciju izstrāde būtu līdzīga Windows aplikāciju izstrādei (kontroles, to dzīves cikls u.c.) Parādījies jēdziens &#8220;<a href="http://msdn.microsoft.com/library/en-us/vbcon/html/vboriIntroToWebForms.asp" title="Par Web formām" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/library/en-us/vbcon/html/vboriIntroToWebForms.asp?referer=');">web forma</a>&#8220;, kas tuvināts Windows formām &#8211; ir pat izveidoti GUI redaktori, ar kuriem strādājot nav jūtama liela atšķirība starp WebFormu un Windows formu (ne tikai <em>VisualStudio.net</em>, bet arī, piemēram <a href="http://www.icsharpcode.net/OpenSource/SD/Default.aspx" title="Mājas iekš sourceForge" onclick="pageTracker._trackPageview('/outgoing/www.icsharpcode.net/OpenSource/SD/Default.aspx?referer=');">SharpDevelop</a>) . </p>

<p><em>ASP.Net</em> web formu izstrādātājs dizaina laikā teorētiski darbojas tikai ar kontroļu izkārtojumu uz &#8220;formas&#8221;, nav jāuztraucas par to, kāds HTML kods tiks ģenerēts šai webformai (tas tiešām tiek ģenerēts atkarībā no lietotāja aģenta, kas lapu pieprasījis &#8211; piemēram, mobilās ierīces saņem pavisam citādu kodu nekā FireFox pārlūks. Savukārt MS Internet Explorer saņem kodu, kas &#8220;pārbāzts&#8221; ar Microsoft papildinājumiem HTML4.0 standartam. Manuprāt, korekts risinājums, ja citi pārlūki netiek ar to traucēti).</p>

<p>Pateicoties pietiekami interesantajai arhitektūrai, <em>ASP.Net</em> ir labi piemērots mērogojamu aplikāciju izstrādei, savukārt tas, ka tehniski sīkumi ir paslēpti pašā <em>ASP.Net</em> infrastruktūrā, ļauj vairāk koncentrēties uz biznesa loģikas implementēšanu.  No otras puses, tieši sīkumu paslēpšana ļauj darboties diletantiski, kā rezultātā rodas jautājumi kā, piemēram &#8220;Kā es varu norādīt faila upload dialogam, kurus faila tipus drīkst izvēlēties?&#8221;</p>

<p>Protams, jāsaprot arī tos, kuri par šo tehnoloģiju izsakās nievājoši &#8211; tās sarežģītības dēļ rodas pārpratumi, kuru pamatā visbiežāk tas, ka kāds rīks tiek lietots citiem mērķiem nekā tas sākotnēji paredzēts.  Tādēļ, izstrādājot <em>ASP.Net</em> aplikācijas, ir tomēr jāizprot WWW būtība, HTTP protokola īpatnības (sesijas, datu pārsūtīšana u.c.) un rūpīgi jālasa dokumentācija, kuras gan šajā gadījumā netrūkst.</p>

<p>Cits bieži minēts arguments ir, ka <em>ASP.Net</em> ģenerē W3C standartiem neatbilstošu HTML kodu. Tā ir taisnība, taču, cik zināms <em>ASP.Net 2.0</em> šī vaina būs labota un tiks ģenerēts tīrs XHTML. Tik jājautā, vai tas būs efektīvi, ja zinām, ka Microsoft parasti neaizraujas ar kompakta HTML ģenerēšanu?</p>

<p><em>ASP.Net</em> darbojas uz serveriem, kur instalēts <em>.Net Framework</em> un lieliski sadarbojas ar Internet Information Server. IIS nebūt nav vienīgā iespēja, <em>ASP.Net</em> var darbināt arī caur Apache 2.0, ja tam papildus tiek izmantots <a href="http://www.codeproject.com/aspnet/cassini_apache_101.asp" title="Par Cassini instalēšanu / lietošanu" onclick="pageTracker._trackPageview('/outgoing/www.codeproject.com/aspnet/cassini_apache_101.asp?referer=');">Cassini modulis</a> vai  Mono projekta ietvaros izstrādāto <a href="http://go-mono.com/asp-net.html" title="Par mono un ASP.Net" onclick="pageTracker._trackPageview('/outgoing/go-mono.com/asp-net.html?referer=');">Apache moduli mod_mono</a>. Strādājot ar IIS, protams, ir ērti pieejama visu veidu lietotāju autorizācija (Basic/Windows/Digest), kas citu webserveru gadījumā, šķiet, varētu nebūt tik vienkārša.</p>
]]></content:encoded>
			<wfw:commentRss>http://tips.naivist.net/2005/06/09/aspnet_intro/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MSDN mazliet mānās par ASP.Net failu upload</title>
		<link>http://tips.naivist.net/2005/05/27/msdn_maanaas/</link>
		<comments>http://tips.naivist.net/2005/05/27/msdn_maanaas/#comments</comments>
		<pubDate>Fri, 27 May 2005 14:09:48 +0000</pubDate>
		<dc:creator>Krišs Rauhvargers</dc:creator>
				<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[VB un .net]]></category>

		<guid isPermaLink="false">http://naivist.net/tips/index.php/2005/05/27/msdn-mazliet-m%c4%81n%c4%81s-par-aspnet-failu-upload/</guid>
		<description><![CDATA[Mēģinām augšuplādēt (upload) failu ASP.net lapā. Priekš tam lapas kodā jāievieto apmēram šāds: &#60;input id="myFile" type="file" runat="server" /&#62; &#60;input type=button id="cmdUp" runat="server" /&#62; Pēc tam varam ķert notikumu, kad nospiesta upload poga. Pēc MSDN rādītā piemēra, pietiek pārbaudīt vai UploadedFile atribūts nav nothing, tas ir, šādi: Private Sub Uploads (ByVal s As System.Object, ByVal e [...]]]></description>
			<content:encoded><![CDATA[<p>Mēģinām augšuplādēt (<em>upload</em>) failu ASP.net lapā. Priekš tam lapas kodā jāievieto apmēram šāds:  </p>

<pre><code>&lt;input id="myFile" type="file" runat="server" /&gt;
&lt;input type=button id="cmdUp" runat="server" /&gt;
</code></pre>

<p>Pēc tam varam ķert notikumu, kad nospiesta upload poga.  Pēc <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebuihtmlcontrolshtmlinputfileclasstopic.asp" title="Stāsts par FileUpload objektu MSDNā" onclick="pageTracker._trackPageview('/outgoing/msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebuihtmlcontrolshtmlinputfileclasstopic.asp&amp;referer=');">MSDN rādītā piemēra</a>, pietiek pārbaudīt vai UploadedFile atribūts nav nothing, tas ir, šādi:</p>

<pre><code>Private Sub Uploads (ByVal s As System.Object, ByVal e As System.EventArgs) Handles cmdUp.ServerClick
         If  Not Me.myFile.PostedFile Is Nothing Then
        '... darām kaut ko
        End If
End Sub
</code></pre>

<p>Tomēr patiesībā &#8220;Not Me.myFile.PostedFile is Nothing&#8221; vienmēr atgriež True &#8211; pat tad, ja faila nav. Vismaz pie konfigurācijas, kāda tā ir man. Līdz ar to vienīgais veids, kā pārbaudīt, ka tiešām kaut kas ir uploadēts, ir: </p>

<pre><code>Private Sub Uploads (ByVal s As System.Object, ByVal e As System.EventArgs) Handles cmdUp.ServerClick
         If  (Not Me.myFile.PostedFile Is Nothing) AndAlso _ 
            (Me.myFile.PostedFile.ContentLength&gt;0) Then
        '... darām kaut ko
        End If
End Sub
</code></pre>

<p>Tā, redz!</p>
]]></content:encoded>
			<wfw:commentRss>http://tips.naivist.net/2005/05/27/msdn_maanaas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

