Skip to content

8. [SimuPaie] uygulaması – sürüm 4 – ASP.NET / çoklu görünüm / tek sayfa


Önerilen okumalar: referans [1], WEB ile ASP.NET 1.1 geliştirme, paragraflar:

  • Sunucu bileşenleri ve uygulama denetleyicisi

  • ASP sunucu bileşenlerini içeren MVC uygulama örnekleri


Şimdi, daha önce incelediğimiz üç katmanlı ASP.NET uygulamasından türetilmiş ve ona yeni işlevler ekleyen bir sürümü inceliyoruz. Uygulamamızın mimarisi şu şekilde gelişmektedir:

Bir istemciden gelen isteğin işlenmesi aşağıdaki adımlara göre gerçekleşir:

  1. Müşteri, uygulamaya bir talep gönderir.
  2. Uygulama bu talebi işler. Bunu yapmak için, [métier] katmanının yardımına ihtiyaç duyabilir; veritabanıyla veri alışverişi yapılması gerekiyorsa, bu katman da [dao] katmanına ihtiyaç duyabilir. Uygulama, [métier] katmanından bir yanıt alır.
  3. Bu yanıt uyarınca, uygulamaya (3) müşteriye gönderilecek görünümü (= yanıt) seçer ve müşteriye ihtiyaç duyduğu bilgileri (şablonu) sağlar (4).
  4. Yanıt, müşteriye gönderilir (5)

Burada MVC (Model – Görünüm – Denetleyici) olarak adlandırılan bir web mimarisi söz konusudur:

  • [Application] denetleyicidir. Müşteriden gelen tüm istekleri görür.
  • [Saisies, Simulation, Simulations, ...], görünümlerdir. Bir .NET uzantılı görünüm, başlatılması gereken bileşenleri içeren standart ASP / HTML kodudur. Bu bileşenlere sağlanması gereken değerler, görünümün modelini oluşturur.

Burada MVC tasarım desenini şu şekilde uygulayacağız:

  • Görünümler, tek bir sayfa olan [Default.aspx] içindeki [View] bileşenleri olacaktır
  • kontrolör ise bu tek sayfanın [Default.aspx.cs] kodudur.

Yalnızca temel uygulamalar bu MVC uygulamasını destekleyebilir. Zira her istek sırasında, [Default.aspx] sayfasının tüm bileşenleri, dolayısıyla tüm görünümler, örneklenir. Yanıt gönderilirken, uygulama kontrol kodu, ilgili [View] bileşenini görünür hale getirip diğerlerini gizleyerek bunlardan birini seçer. Uygulamada çok sayıda görünüm varsa, [Default.aspx] sayfası çok sayıda bileşene sahip olacak ve bu sayfanın örneklenme maliyeti çok yüksek hale gelebilir. Ayrıca, sayfadaki [Design] modu, çok fazla görünüm içermesi nedeniyle yönetilemez hale gelme riski taşır. Bu tür bir mimari, az sayıda görünüme sahip ve tek bir kişi tarafından geliştirilen uygulamalar için uygundur. Uygulanabildiği durumlarda, MVC mimarisini çok basit bir şekilde geliştirmeye olanak tanır. Bu yeni sürümde bunu göreceğiz.

8.1. Uygulamanın görünümleri

Kullanıcıya sunulan farklı görünümler şunlar olacaktır:

  • simülasyon formunu gösteren [VueSaisies] görünümü

Image

  • Simülasyonun ayrıntılı sonucunu görüntülemek için kullanılan [VueSimulation] görünümü:

Image

  • müşteri tarafından yapılan simülasyonların listesini veren [VueSimulations] görünümü

Image

  • Müşterinin simülasyonu olmadığını veya artık simülasyonu kalmadığını gösteren [VueSimulationsVides] görünümü:

Image

  • Bir veya daha fazla hata olduğunu gösteren [VueErreurs] görünümü:

Image

8.2. [web] katmanının Visual Web Developer projesi

[web] katmanına ait Visual Web Developer projesi şöyledir:

  • [1]'te şunlar bulunur:
  • uygulamanın [Web.config] yapılandırma dosyası – önceki uygulamanınkiyle aynıdır.
  • web uygulamasının olaylarını (burada başlatma) yöneten [Global.cs] dosyası – önceki uygulamanınkiyle aynıdır, ancak kullanıcı oturumunun başlatılmasını da yönetir.
  • Uygulamanın [Default.aspx] formu – uygulamanın çeşitli görünümlerini içerir.
  • [2] dosyasında proje referansları bulunur; bunlar önceki sürümdekilerle aynıdır.

8.3. [Global.cs] dosyası

Web uygulamasının olaylarını yöneten [Global.cs] dosyası, kullanıcı oturumunun başlatılmasını da yönetmesi dışında önceki uygulamanınkiyle aynıdır:

Global.cs


using System;
using System.Web;
using Pam.Dao.Entites;
using Pam.Metier.Service;
using Spring.Context.Support;
using System.Collections.Generic;
using istia.st.pam.web;

namespace pam_v4
{
    public class Global : HttpApplication
    {

        // --- uygulamanın statik verileri ---
        public static Employe[] Employes;
        public static string Msg = string.Empty;
        public static bool Erreur = false;
        public static IPamMetier PamMetier = null;

        // uygulamanın başlatılması
        public void Application_Start(object sender, EventArgs e)
        {
...
        }

        // kullanıcı oturumu başlatılıyor 
        public void Session_Start(object sender, EventArgs e)
        {
            // oturuma boş bir simülasyon listesi ekleniyor 
            Session["simulations"] = new List<Simulation>();
        } 

    }
}
  • 27-34. satırlar: oturumun başlatılması yönetilir. Buraya, kullanıcı tarafından yapılan simülasyonların listesini ekleyeceğiz.
  • 30. satır: Boş bir simülasyon listesi oluşturulur. Simülasyon, yakında ayrıntılı olarak ele alacağımız [Simulation] türünde bir nesnedir.
  • 31. satır: Simülasyon listesi, "simulations" anahtarıyla ilişkili oturuma yerleştirilir.

8.4. [Simulation] sınıfı

[Simulation] türündeki bir nesne, simülasyon tablosundaki bir satırı kapsüllemek için kullanılır:

Image

Kodu şu şekildedir:


namespace Pam.Web
{

    public class Simulation
    {
        // bir simülasyonun verileri 
        public string Nom { get; set; }
        public string Prenom { get; set; }
        public double HeuresTravaillees { get; set; }
        public int JoursTravailles { get; set; }
        public double SalaireBase { get; set; }
        public double Indemnites { get; set; }
        public double CotisationsSociales { get; set; }
        public double SalaireNet { get; set; }

        // yapıcılar 
        public Simulation()
        {

        }

        public Simulation(string nom, string prenom, double heuresTravailllees, int joursTravailles, double salaireBase, double indemnites, double cotisationsSociales, double salaireNet)
        {
            {
                this.Nom = nom;
                this.Prenom = prenom;
                this.HeuresTravaillees = heuresTravailllees;
                this.JoursTravailles = joursTravailles;
                this.SalaireBase = salaireBase;
                this.Indemnites = indemnites;
                this.CotisationsSociales = cotisationsSociales;
                this.SalaireNet = salaireNet;
            }
        }
    }
}

Sınıfın alanları, simülasyon tablosunun sütunlarına karşılık gelir.

8.5. [Default.aspx] sayfası

8.5.1. Genel Bakış

[Default.aspx] sayfası, her bir görünüm için birer tane olmak üzere birkaç [View] bileşeni içerir. Sayfanın iskeleti şöyledir:


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="pam_v4.PagePam" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Simulateur de paie</title>
</head>
<body background="ressources/standard.jpg">
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" />
    <asp:UpdatePanel runat="server" ID="UpdatePanelPam" UpdateMode="Conditional">
        <ContentTemplate>
            <table>
                <tr>
                    <td>
                        <h2>
                            Simulateur de calcul de paie</h2>
                    </td>
                    <td>
                        <label>
                            &nbsp;&nbsp;&nbsp</label>
                        <asp:UpdateProgress ID="UpdateProgress1" runat="server">
                            <ProgressTemplate>
                                <img src="images/indicator.gif" />
                                <asp:Label ID="Label5" runat="server" BackColor="#FF8000"
                                         EnableViewState="False" Text="Calcul en cours. Patientez ....">
                                        </asp:Label>
                            </ProgressTemplate>
                        </asp:UpdateProgress>
                    </td>
                    <td>
                       <asp:LinkButton ID="LinkButtonFaireSimulation" runat="server" 
                                CausesValidation="False" OnClick="LinkButtonFaireSimulation_Click">
                                    | Faire la simulation<br /></asp:LinkButton>
                       <asp:LinkButton ID="LinkButtonEffacerSimulation" runat="server"
                                     CausesValidation="False" OnClick="LinkButtonEffacerSimulation_Click">
                                    | Effacer la simulation<br /></asp:LinkButton>
                       <asp:LinkButton ID="LinkButtonVoirSimulations" runat="server" 
                                CausesValidation="False" OnClick="LinkButtonVoirSimulations_Click">
                                    | Voir les simulations<br /></asp:LinkButton>
                        <asp:LinkButton ID="LinkButtonFormulaireSimulation" runat="server"
                                CausesValidation="False" OnClick="LinkButtonFormulaireSimulation_Click">
                                | Retour au formulaire de simulation<br /></asp:LinkButton>
                        <asp:LinkButton ID="LinkButtonEnregistrerSimulation" runat="server"
                                CausesValidation="False" OnClick="LinkButtonEnregistrerSimulation_Click">
                                    | Enregistrer la simulation<br /></asp:LinkButton>
                        <asp:LinkButton ID="LinkButtonTerminerSession" runat="server"
                                CausesValidation="False" OnClick="LinkButtonTerminerSession_Click">
                                    | Terminer la session<br /></asp:LinkButton>
                    </td>
            </table>
            <hr />
            <asp:MultiView ID="Vues1" ActiveViewIndex="0" runat="server">
                <asp:View ID="VueSaisies" runat="server">
...
                </asp:View>
            </asp:MultiView>
            <asp:MultiView ID="Vues2" runat="server">
                <asp:View ID="VueSimulation" runat="server">
...
                </asp:View>
                <asp:View ID="VueSimulations" runat="server">
...
                </asp:View>
                <asp:View ID="VueSimulationsVides" runat="server">
...
                </asp:View>
                <asp:View ID="VueErreurs" runat="server">
...
                </asp:View>
            </asp:MultiView>
        </ContentTemplate>
    </asp:UpdatePanel>
    </form>
</body>
</html>
  • 10. satır: Ajax uzantılarını yerleştirmek için etiket
  • 11-73. satırlar: Ajax çağrılarıyla güncellenen UpdatePanel konteyneri
  • 12-72. satırlar: UpdatePanel konteynerinin içeriği
  • 13-52. satırlar: Her görünümde yer alacak başlık. Kullanıcıya, bağlantı listesi biçiminde gerçekleştirilebilecek eylemlerin listesini sunar.
  • 33. satır: CausesValidation="False" özniteliği dikkat çekmektedir; bu öznitelik, bağlantıya tıklandığında sayfanın doğrulayıcılarının örtük olarak çalıştırılmamasını sağlar. Bu öznitelik bulunmadığında, varsayılan değeri True'tir. Sayfanın doğrulaması, sunucu tarafında yürütülen kodda Page.Validate işlemiyle açıkça yapılabilir.
  • 53-57. satırlar: Tek bir [VueSaisies] görünümüne sahip bir [MultiView] bileşeni. Bu nedenle, 53. satırda görüntülenecek görünüm numarası sabit olarak belirtilmiştir: ActiveViewIndex="0"
  • 53-67. satırlar: Dört görünüme sahip bir [MultiView] bileşeni: 59-61. satırlardaki [VueSimulation] görünümü, 62-64. satırlardaki [VueSimulations] görünümü, 65-67. satırlardaki [VueSimulationsVides] görünümü, 68-70. satırlardaki [VueErreurs] görünümü. Bir [MultiView] bileşeni aynı anda yalnızca bir görünüm gösterir. Vues2 bileşeninin i numaralı görünümünü görüntülemek için şu kod yazılmalıdır:
Vues2.ActiveViewIndex=i

8.5.2. 'i başlığı

Başlık, aşağıdaki bileşenlerden oluşur:

No
Tür
Ad
Rol
1
LinkButton
LinkButtonFaireSimulation
simülasyonun hesaplanmasını ister
2
LinkButton
LinkButtonEffacerSimulation
giriş formunu sil
3
LinkButton
LinkButtonVoirSimulations
daha önce yapılmış simülasyonların listesini gösterir
4
LinkButton
LinkButtonFormulaireSimulation
giriş formuna geri döner
5
LinkButton
LinkButtonEnregistrerSimulation
mevcut simülasyonu simülasyon listesine kaydeder
6
LinkButton
LinkButtonTerminerSession
geçerli oturumu sonlandırır

8.5.3. [Saisies] görünümü

[View] adlı bileşen ([VueSaisies]) şöyledir:

No.
Tür
Ad
Rol
1
DropDownList
ComboBoxEmployes
Çalışanların isim listesini içerir
2
TextBox
TextBoxHeures
Çalışılan saat sayısı – gerçek sayı
3
TextBox
TextBoxJours
Çalışılan gün sayısı – tam sayı
4
RequiredFieldValidator
RequiredFieldValidatorHeures
[2] ve [TextBoxHeures] alanlarının boş olmadığını kontrol eder
5
RegularExpressionValidator
RegularExpressionValidatorHeures
[2] [TextBoxHeures] alanının >=0 olan bir gerçek sayı olduğunu kontrol eder
6
RequiredFieldValidator
RequiredFieldValidatorJours
[3] ve [TextBoxJours] alanlarının boş olmadığını kontrol eder
7
RegularExpressionValidator
RegularExpressionValidatorJours
[3] ve [TextBoxJours] alanlarının >=0 olan bir tamsayı olup olmadığını kontrol eder

8.5.4. [Simulation] görünümü

[VueSimulation] olarak adlandırılan [View] bileşeni şöyledir:

Image

Yalnızca [Label] bileşenlerinden oluşur; bunlardan ID'ler yukarıda belirtilmiştir.

8.5.5. [Simulations] görünümü

[View] adlı bileşen, [VueSimulations] şu şekildedir:

No
Tür
Ad
Rol
1
GridView
GridViewSimulations
Simülasyon listesini içerir

[GridViewSimulations] bileşeninin özellikleri şu şekilde tanımlanmıştır:

  • [1]'te: [GridView] üzerine sağ tıklayın / [Mise en forme automatique] seçeneği
  • [2]'e: [GridView] için bir görüntüleme türü seçin
  • [3]'te: [GridView]'in özelliklerini seçin
  • [4]'te: [GridView]'in sütunlarını düzenleyin
  • [5]'te: [BoundField] türünde bir sütun ekleyin; bu sütun, [GridView] satırında görüntülenecek nesnenin genel özelliklerinden birine bağlanacaktır. Burada görüntülenen nesne, [Simulation] türünde bir nesne olacaktır.
  • [6]'te: sütunun başlığını belirtin
  • [7]'te: bu sütuna eşleştirilecek [Simulation] sınıfının özellik adını belirtin.
  • [DataFormatString], sütunda görüntülenecek değerlerin nasıl biçimlendirileceğini belirtir.

[GridViewSimulations] bileşeninin sütunları aşağıdaki özelliklere sahiptir:

No
Özellikler
2
Tür: BoundField, HeaderText: Ad, DataField: Ad
3
Tür: BoundField, HeaderText: Soyadı, DataField: Adı
4
Tür: BoundField, HeaderText: Çalışılan saatler, DataField: HeuresTravaillees
5
Tür: BoundField, HeaderText: Çalışılan günler, DataField: JoursTravailles
6
Tür: BoundField, HeaderText: Temel maaş, DataField: SalaireBase, DataFormatString: {0:C} (para birimi biçimi, C=Currency) – euro sembolünü gösterir.
7
Tür: BoundField, HeaderText: Ödenekler, Veri Alanı: Ödenekler, DataFormatString: {0:C}
8
Tür: BoundField, HeaderText: Sosyal güvenlik primleri, DataField: CotisationsSociales, DataFormatString: {0:C}
9
Tür: BoundField, HeaderText: Net maaş, DataField: SalaireNet, DataFormatString: {0:C}

[DataField] alanının, [Simulation] sınıfının mevcut bir özelliğiyle eşleşmesi gerektiğine dikkat edilmelidir. Bu aşamanın sonunda, [BoundField] türündeki tüm sütunlar oluşturulmuştur:

  • [1]'te: [GridView] için oluşturulan sütunlar
  • [2]: Az önce yaptığımız gibi sütunları geliştiricinin kendisi tanımladığı durumlarda, sütunların otomatik olarak oluşturulması engellenmelidir.

Geriye [Retirer] bağlantı sütununu oluşturmak kaldı:

Image

  • [1]'te: [CommandField / Supprimer] türünde bir sütun ekleyin
  • [2]'te: ButtonType=Link, sütunda düğme yerine bir bağlantı olması için
  • [3]'te: CausesValidation=False, bağlantıya tıklandığında sayfada bulunabilecek doğrulama denetimleri çalıştırılmayacaktır. Zira bir simülasyonun silinmesi için herhangi bir veri doğrulaması gerekmez.
  • [4]'te: Yalnızca silme bağlantısı görünür olacaktır.
  • [5]'te: bu bağlantının metni

8.5.6. [SimulationsVides] görünümü

[VueSimulationsVides] olarak adlandırılan [View] bileşeni sadece metin içerir:

 

8.5.7. [Erreurs] görünümü

[VueErreurs] olarak adlandırılan [View] bileşeni şöyledir:

No.
Tür
Ad
Rol
1
Tekrarlayıcı
RptErreurs
hata mesajlarının bir listesini görüntüler

[Repeater] bileşeni, bir veri kaynağındaki her nesne için (genellikle bir koleksiyon) ASP.NET / HTML kodunu tekrarlamaya olanak tanır. Bu kod, doğrudan şu sayfanın ASP.NET kaynak kodunda tanımlanmıştır:


                <asp:Repeater ID="RptErreurs" runat="server">
                    <ItemTemplate>
                        <li>
                            <%# Container.DataItem %>
                        </li>
                    </ItemTemplate>
</asp:Repeater>
  • 2. satır: <ItemTemplate>, veri kaynağındaki her bir öğe için tekrarlanacak kodu tanımlar.
  • 4. satır: Veri kaynağındaki geçerli öğeyi belirten Container.DataItem ifadesinin değerini gösterir. Bu öğe bir nesne olduğundan, onu sayfanın HTML akışına dahil etmek için bu nesnenin ToString yöntemi kullanılır. Nesne koleksiyonumuz, hata mesajlarını içeren bir List(Of String) koleksiyonu olacaktır. 3-5. satırlar, <li>Message</li> dizilerini sayfanın HTML akışına dahil edecektir.

8.6. [Default.aspx.cs] denetleyicisi

8.6.1. Genel Bakış

Uygulamanın MVC mimarisine geri dönelim:

  • [Default.aspx.cs], tek sayfanın kontrol kodudur; [Default.aspx] ise uygulamanın denetleyicisidir.
  • [Global], uygulamayı başlatan ve [métier] katmanına bir referans içeren [HttpApplication] türündeki nesnedir.

[Default.aspx.cs] denetleyicisinin kod iskeleti şu şekildedir:


using System.Collections.Generic;
...

public partial class PagePam : Page
{

    private void setVues(bool boolVues1, bool boolVues2, int index)
    {
        // istenen görünümler görüntülenir 
        // boolVues1: Vues1 çoklu görünümünün görünür olması gerekiyorsa true 
        // boolVues1: "Vues2" çoklu görünümünün görünür olması gerekiyorsa true 
        // index: görüntülenecek Vues2 görünümünün dizini 
...
    }

    private void setMenu(bool boolFaireSimulation, bool boolEnregistrerSimulation, bool boolEffacerSimulation, bool boolFormulaireSimulation, bool boolVoirSimulations, bool boolTerminerSession)
    {
        // menü seçenekleri belirlenir 
        // her bir boole değeri, ilgili bağlantının Visible özelliğine atanır 
...
    }

    // sayfanın yüklenmesi 
    protected void Page_Load(object sender, System.EventArgs e)
    {
        // ilk isteğin işlenmesi 
        if (!IsPostBack)
        {
...
        }
    }

    protected void LinkButtonFaireSimulation_Click(object sender, System.EventArgs e)
    {
...
    }

    protected void LinkButtonEffacerSimulation_Click(object sender, System.EventArgs e)
    {
....
    }

    protected void LinkButtonVoirSimulations_Click(object sender, System.EventArgs e)
    {
...
    }

    protected void LinkButtonEnregistrerSimulation_Click(object sender, System.EventArgs e)
    {
...
    }

    protected void LinkButtonTerminerSession_Click(object sender, System.EventArgs e)
    {
...
    }

    protected void LinkButtonFormulaireSimulation_Click(object sender, System.EventArgs e)
    {
...
    }


    protected void GridViewSimulations_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
...
    }
}

Kullanıcının ilk isteğinde (GET), yalnızca 24-31. satırlardaki Load olayı işlenir. Menü bağlantıları üzerinden yapılan sonraki isteklerde (POST), iki olay işlenir:

  1. Load olayı (24-31), ancak Page.IsPostback boole testi (27. satır) nedeniyle hiçbir işlem yapılmaz.
  2. tıklanan bağlantıyla ilişkili olay:
  • 33-36. satırlar: [1] bağlantısına yapılan tıklamayı işler
  • 38-41. satırlar: [2] bağlantısına yapılan tıklamayı işler
  • 43-46. satırlar: [3] bağlantısına yapılan tıklamayı işler
  • 58-61. satırlar: [4] bağlantısına yapılan tıklamayı işler
  • 48-51. satırlar: [5] bağlantısına yapılan tıklamayı işler
  • 53-56. satırlar: [6] bağlantısına yapılan tıklamayı işler

Sıkça tekrarlanan kod dizilerini faktörlere ayırmak için iki dahili yöntem oluşturulmuştur:

  • setVues, satır 7-14: görüntülenecek görünümü veya görünümleri belirler
  • setMenu, satır 16-21: görüntülenecek menü seçeneklerini belirler

8.6.2. Load olayı


Önerilen okumalar: [1] referansı, WEB ile geliştirme (ASP.NET 1.1):

  • [Repeater] Bileşeni ve veri bağlantısı bölümü.

Kullanıcıya sunulan ilk görünüm, boş formdur:

Image

Uygulamanın başlatılması için bir veri kaynağına erişim gerekir; bu işlem başarısız olabilir. Bu durumda, ilk sayfa bir hata sayfasıdır:

Image

[Load] olayı, önceki ASP.NET sürümleriyle benzer şekilde işlenir:


    // sayfanın yüklenmesi 
    protected void Page_Load(object sender, System.EventArgs e)
    {
        // ilk isteğin işlenmesi 
        if (!IsPostBack)
        {
            // başlatma hataları mı var? 
            if (Global.Erreur)
            {
                // [erreurs] görünümü görüntüleniyor 
...
                // menü konumlandırma 
                ...
                return;
            }
            // çalışan isimlerinin açılır menüye yüklenmesi 
...
            // menü konumlandırma 
...
            // [saisie] görünümünün görüntülenmesi 
 ...
        }
}

Soru: Yukarıdaki kodu tamamlayınız


8.6.3. Eylem: Simülasyonu yapın

Aşağıda, (1) ile işaretli ekran kullanıcının talebini, (2) ile işaretli ekran ise web uygulaması tarafından kullanıcıya gönderilen yanıtı göstermektedir. Kullanıcı, ana ekrandan bir simülasyon başlatabilir:

Image

- (1): Kullanıcı bir simülasyon talep eder

Image

- (2): simülasyon sonucu

Bu eylemi işleyen prosedür aşağıdaki gibi olabilir:


    protected void LinkButtonFaireSimulation_Click(object sender, System.EventArgs e)
    {
        // maaş hesaplama 
        // sayfa geçerli mi? 
        Page.Validate();
        if (!Page.IsValid)
        {
            // görünüm [saisie] 
            ...
            return;
        }
        // sayfa geçerli - girdiler alınır 
        double HeuresTravaillées = ...;
        int JoursTravaillés = ...;
        // çalışanın maaşı hesaplanıyor 
        FeuilleSalaire feuillesalaire;
        try
        {
            feuillesalaire = ...
        }
        catch (PamException ex)
        {
            // [erreurs] görünümünü görüntüleme 
...
            return;
        }
        // sonuç oturuma kaydediliyor 
        Session["simulation"] = ...
        // sonuçların görüntülenmesi 
...
        // [saisie, employe, salaire] görünümlerinin görüntülenmesi 
        ...
        // menü görüntüleme 
        ...
}

Soru: Yukarıdaki kodu tamamlayınız


8.6.4. Eylem: Simülasyonu kaydet

Simülasyon tamamlandıktan sonra, kullanıcı simülasyonun kaydedilmesini talep edebilir:

- (1): mevcut simülasyonun kaydedilmesi talebi

Image

- (2): Simülasyon kaydedilir ve gerçekleştirilen simülasyonların listesi görüntülenir

Bu eylemi işleyen prosedür aşağıdaki gibi olabilir:


    protected void LinkButtonEnregistrerSimulation_Click(object sender, System.EventArgs e)
    {
        // mevcut simülasyonu oturumdaki simülasyonlar listesine kaydedilir 
        ...
        // [simulations] görünümünü görüntüler 
        ...
}

Soru: Yukarıdaki kodu tamamlayınız


8.6.5. Eylem: Simülasyon formuna geri dön


Önerilen okumalar: referans [1], [Développement WEB avec ASP.NET 1.1 ]: gizli alanın rolü _VIEWSTATE


Simülasyon listesi görüntülendikten sonra, kullanıcı simülasyon formuna geri dönmeyi talep edebilir:

(2) numaralı ekranda, formun girildiği haliyle görüntülendiğine dikkat edilmelidir. Burada, bu farklı görünümlerin aynı sayfaya ait olduğu unutulmamalıdır. Farklı istekler arasında, bileşenlerin değerleri, bu bileşenlerin ViewState özelliğinin değeri EnableViewState ile true arasında ise, ViewState mekanizması tarafından korunur.

Bu eylemi işleyen prosedür aşağıdaki gibi olabilir:


    protected void LinkButtonFormulaireSimulation_Click(object sender, System.EventArgs e)
    {
        // [saisie] görünümünü göster 
        ...
        // menü konumlandırma 
        ...
}

Soru: Yukarıdaki kodu tamamlayınız


8.6.6. Eylem: Simülasyonu sil

Simülasyon formuna geri döndüğünde, kullanıcı mevcut girdilerin silinmesini talep edebilir:

Bu eylemi işleyen prosedür aşağıdaki gibi olabilir:


    protected void LinkButtonEffacerSimulation_Click(object sender, System.EventArgs e)
    {
        // formun RAZ 
        ...
}

Soru: Yukarıdaki kodu tamamlayın


8.6.7. Eylem: Simülasyonları görüntüle

Kullanıcı, daha önce yaptığı simülasyonları görüntülemeyi talep edebilir:

Bu eylemi işleyen prosedür aşağıdaki gibi olabilir:


protected void LinkButtonVoirSimulations_Click(object sender, System.EventArgs e)
    {
        // simülasyonlar oturumdan alınır
        ...
        // simülasyon var mı? 
        if (...)
        {
            // [simulations] görünümü 
...
        }
        else
        {
            // [SimulationsVides] görünümü 
            ...
        }
        // menü sabitleniyor 
        ...
    }

Soru: Yukarıdaki kodu tamamlayınız


8.6.8. Eylem: Simülasyonu sil

Kullanıcı bir simülasyonun silinmesini talep edebilir:

Bu eylemi işleyen [GridViewSimulations_RowDeleting ] prosedürü aşağıdaki gibi olabilir:


    protected void GridViewSimulations_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        // oturumdaki simülasyonları alın
        ...
        // belirtilen simülasyon siliniyor (e.RowIndex silinen satırın numarasıdır)
        ...
        // Hala simülasyonlar var mı? 
        if (...)
        {
            // GridView dosyası doldurulur 
 ...
        }
        else
        {
            // görünüm [SimulationsVides] 
            ...
        }
}

Soru: Yukarıdaki kodu tamamlayınız


8.6.9. Eylem: Oturumu sonlandır

Kullanıcı, simülasyon oturumunu sonlandırmayı talep edebilir. Bu işlem, oturum içeriğini siler ve boş bir form görüntüler:

Bu eylemi işleyen prosedür aşağıdaki gibi olabilir:


    protected void LinkButtonTerminerSession_Click(object sender, System.EventArgs e)
    {
        // oturumdan çıkılıyor 
        ...
        // [saisies] görünümünü göster 
        ...
        // menü konumlandırma 
        ...
}

Soru: Yukarıdaki kodu tamamlayınız


Uygulamalı çalışma: Önceki web uygulamasını bir makinede çalıştırın. Uygulamaya bir Ajax işlevi ekleyin.