Piotr Szczepanik – programowanie (.Net, C#, SQL), administracja, IT

blog IT: programowanie, administracja
Mamy nowo postawiony serwer IIS 6. Zainstalowany .Net Framework. Umieszczona witryna napisana w ASP.Net, witryna IIS skonfigurowana do pracy z odpowiednią wersją Framework’a.

Po wpisaniu poprawnego adresu do witryny / pliku ASPX mamy błąd 404 – plik nie istnieje ?

Co robić? Prosta sprawa: sprawdzić czy mamy dozwolone rozszerzenie ASP.Net w naszym serwerze WWW. Zatem:

1. Przechodzimy do Menadżera internetowych usług informacyjnych (IIS).
2. Klikamy na gałęzi „Rozszerzenia usługi sieci Web„.
3. Na liście dostępnych rozszerzeń odszukujemy te o nazwie „ASP.NET…„, zaznaczamy i klikamy „Zezwalaj„.
4. Sprawdzamy czy pomogło ;) .
Jak w ASP .Net pobrać dane z folderu App_GlobalResources ?

Obiekt klasy System.Resources.ResourceManager umożliwia nam łatwy sposób na „dobieranie” się do zasobów przechowywanych w App_GlobalResources. Poniższe przykłady ilustrują sposoby na pobranie obiektu danego zasobu.

Sposób 1 (C#).

 C# |  kopiuj kod |? 
1
System.Resources.ResourceManager rmRes = Resources.NazwaPliku.ResourceManager;

Gdzie NazwaPliku wskazuje na konkretny plik resx znajdujący się w folderze App_GlobalResources.

Możemy również dostać się bezpośrednio do elementy danego pliku resx:

 C# |  kopiuj kod |? 
1
string strValue = Resources.NazwaPliku.DanyKlucz;

Sposób 2 (C#).
 C# |  kopiuj kod |? 
1
using System.Reflection;
2
using System.Resources;
3
Assembly aRes = Assembly.Load(new  AssemblyName("App_GlobalResources"));
4
if (aRes != null)
5
{
6
ResourceManager rmRes = new ResourceManager("Resources<em>.NazwaPliku"</em>, aRes);
7
}
Gdzie NazwaPliku wskazuje na konkretny plik resx znajdujący się w folderze App_GlobalResources.
Czy zdarzały Ci się utraty zawartości sesji (w trybie InProc) w swojej aplikacji ASP.Net ?

Jedną z przyczyn takich zdarzeń może być fakt restartu aplikacji webowej.

Możliwe przyczyny restartu aplikacji:

  • modyfikacja któregoś z plików: machine.config, web.config, global.asax; w niektórych przypadkach programy antywirusowe mogą powodować, iż pomimo braku modyfikacji zawartości tych plików serwer dokona restartu aplikacji,
  • modyfikacja plików w katalogu bin aplikacji,
  • pliki ASP.Net (np. aspx, asmx) zostały zmodyfikowane, a w rezultacie przekompilowane więcej razy niż wskazuje sekcja compile -> numRecompilesBeforeApprestart pliku machine.config; domyślnie wartość ta jest dosyć niska, dlatego w przypadku gdy często dokonujemy aktualizacji naszych plików aplikacji na serwerze zaleca się jej zwiększenie,
  • wewnątrz katalogu aplikacji został utworzony / skasowany / lub została zmieniona nazwa innego katalogu,
  • pula aplikacji (AppPool) w IIS jest skonfigurowana tak, aby odświeżanie aplikacji (app recycle) wykonywane było zbyt często; aby zmodyfikować wartości odświeżania należy przejść do menadżer internetowych usług informacyjnych > pule aplikacji > [pula naszej aplikacji]  > prawy klawisz myszki - Właściwości : zakładka Odświeżanie.
W przypadku używania trybu InProc do przechowywania stanu sesji, gdy w IIS używamy (Ogrodu sieci Web garden) mogą nastąpić utraty stanu sesji bez restartu aplikacji. W takim przypadku musimy sprawdzić czy wartość Maksymalna liczba procesów roboczych dla puli naszej aplikacji nie jest ustawiona na liczbę większą od 1.

Aby przejść do konfiguracji Ogrodu sieci: menadżer internetowych usług informacyjnych > pule aplikacji > [pula naszej aplikacji]  > prawy klawisz myszki - Właściwości : zakładka Wydajność, sekcja Ogród sieci Web.
W jaki sposób powrócić na poprzednią stronę przy użyciu kodu ASP.Net ?

Poniżej jeden ze sposobów na rozwiązanie zadania.

Przy pomocy Response.Redirect:

 C# |  kopiuj kod |? 
1
string strPath = Request.UrlReferrer.AbsoluteUri;
2
Response.Redirect(strPath);

Przy pomocy Server.Transfer:

 C# |  kopiuj kod |? 
1
string strPath = Request.UrlReferrer.AbsolutePath;
2
Server.Transfer(strPath);
Jak ponumerować wiersze / rekordy w kontrolce GridView?

Można to zrobić co najmniej na dwa sposoby.

Sposób 1. Tworzymy nową kolumnę typu TemplateField i wstawiamy odpowiedni kod do jej zawartości:
 C# |  kopiuj kod |? 
1
<asp:TemplateField>
2
<ItemTemplate>
3
<%# Container.DataItemIndex + 1 %>.
4
</ItemTemplate>
5
</asp:TemplateField>

Uwaga! Jeżeli używamy dzielenia na strony w kontrolce GridView zamiast Container.DataItemIndex stosujemy Container.Displayindex.

Sposób 2. Tworzymy kolumnę typu TemplateField i umieszczamy ją jako pierwszą w GridView. W zdarzeniu OnDataBound kontrolki umieszczamy następujący kod:
 C# |  kopiuj kod |? 
1
for (int i = 0; i &lt; gvGridView.Rows.Count; i++)
2
{
3
gvGridView.Rows[i].Cells[0].Text = (i + 1).ToString() + ".";
4
}