Поделиться через


Веб-узел ASP.NET приложения Human Resources (образец приложения модели EDM)

Приложение Human Resources в ASP.NET — это интерфейс, который может быть использован в сети или Интернете для отображения данных, определенных и скомпилированных с помощью данного примера: Приложение Human Resources Skills для Windows (образец приложения модели EDM). Это веб-приложение ссылается на те же схемы и библиотеки, которые используются в приложении Windows. Веб-узел создается в три этапа.

  1. Разработайте пользовательский интерфейс в виде формы на веб-странице, содержащий текстовое поле и элементы управления сеткой просмотра для управления вводом и отображением данных.

  2. Напишите фоновый код ASP.NET интерфейса, обрабатывающий входные события и отображающий результаты поиска по параметрам, введенным пользователем.

  3. Настройте службы IIS для запуска приложения ASP.NET и подключения к данным, хранимым на SQL Server, которые используются моделью данных HRSkills.

Пользовательский интерфейс

Пользовательский интерфейс состоит из двух текстовых полей для ввода текста, определяющих параметры поиска. Пользователи могут искать сотрудников по первой букве фамилии или навыкам с помощью ключевых слов. Результаты поисков по данным параметрам отображаются в элементах управления сеткой просмотра, привязанных к запросам объектов модели EDM, представляющим сотрудников, навыки и сведения о них, а также личные рекомендации.

Пользовательский интерфейс показан на следующем экране:

Результаты запроса приложения ASP.NET HR Skills

Следующая XML-спецификация определяет форму и элементы управления на веб-странице, которая будет выведена пользователю. Скопируйте этот синтаксис в файл Default.aspx веб-приложения ASP.NET в среде Visual Studio.

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

<!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 runat="server">
    <title>HR Skills Online</title>
</head>
<body>
    <form id="form1" runat="server">
    &nbsp;<asp:Label ID="Label1" runat="server" Font-Bold="True" 
        Text="Filter employees by first letter of last name; 
        Use * to get all employees: "></asp:Label>
&nbsp;<asp:TextBox ID="TextBox1" runat="server" MaxLength="1" 
        ontextchanged="TextBox1_TextChanged" Width="29px" 
        AutoPostBack="True"></asp:TextBox>
&nbsp;&nbsp;
        <br />
        <asp:Label ID="Label2" runat="server" Font-Bold="True" 
        Text="Search for skills on  keyword; Use * to get all skills: ">
        </asp:Label>
        <asp:TextBox ID="TextBox2" runat="server" MaxLength="50" 
        Width="271px" AutoPostBack="True" 
        ontextchanged="TextBox2_TextChanged">
        </asp:TextBox>
&nbsp;<asp:GridView 
        ID="GridView1" runat="server" BackColor="LightGoldenrodYellow" 
        BorderColor="Tan" BorderWidth="1px" CellPadding="2" 
        ForeColor="Black" 
        onselectedindexchanged="GridView1_SelectedIndexChanged" 
        Caption="Employees (Click row for skills)" CaptionAlign="Top"
        CellSpacing="1">
            <footerstyle backcolor="Tan" />
            <selectedrowstyle backcolor="DarkSlateBlue"
            forecolor="GhostWhite" />
            <pagerstyle backcolor="PaleGoldenrod" 
            forecolor="DarkSlateBlue" 
            horizontalalign="Center" />
            <headerstyle backcolor="Tan" font-bold="True" 
            font-size="Medium" />
            <alternatingrowstyle backcolor="PaleGoldenrod" />
        </asp:GridView>
        <br />
        <asp:GridView 
        ID="GridView2" runat="server" BackColor="LightGoldenrodYellow" 
        BorderColor="Tan" BorderWidth="1px" CellPadding="2" 
        ForeColor="Black" 
        onselectedindexchanged="GridView2_SelectedIndexChanged" 
        Caption="Skills (Click row for details)" CaptionAlign="Top" 
        CellSpacing="1" 
        PageSize="5">
            <footerstyle backcolor="Tan" />
            <selectedrowstyle backcolor="DarkSlateBlue" 
            forecolor="GhostWhite" />
            <pagerstyle backcolor="PaleGoldenrod" 
            forecolor="DarkSlateBlue" horizontalalign="Center" />
            <headerstyle backcolor="Tan" font-bold="True" />
            <alternatingrowstyle backcolor="PaleGoldenrod" />
        </asp:GridView>
        <br />
        <asp:GridView ID="GridView3" runat="server" 
        BackColor="LightGoldenrodYellow" 
        BorderColor="Tan" BorderWidth="1px" CaptionAlign="Top"
        CellPadding="2" 
        CellSpacing="1" ForeColor="Black" 
        onselectedindexchanged="GridView3_SelectedIndexChanged">
            <footerstyle backcolor="Tan" forecolor="GhostWhite" />

            <pagerstyle backcolor="PaleGoldenrod" 
            forecolor="DarkSlateBlue" 
            horizontalalign="Center" />
            <headerstyle backcolor="Tan" font-bold="True" />
            <alternatingrowstyle backcolor="PaleGoldenrod" />
        </asp:GridView>
    </form>
</body>
</html>

Фоновый код ASP.NET веб-элементов управления

Код C#, используемый для управления событиями, сформированными вводом пользователя, содержащийся в файле с фоновым кодом Default.aspx.cs. Чтобы определить запросы объектов и привязать результаты к элементам управления сеткой просмотра, используется следующий код. Подробное описание этих операций см. в разделе Код приложения HR Skills (образец приложения модели EDM).

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using HRSkillsModel;
using System.Data.Objects;

namespace HRSkillsOnline
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void GridView1_SelectedIndexChanged(object sender,
        EventArgs e)
        {
            GridView2.SelectedIndex = -1;
            GridView3.SelectedIndex = -1;
            string connectionStr =
                Application.Contents["connectionString"] as string;


            using (HRSkillsEntities HRSkills = new HRSkillsEntities())
            {
                Guid empId = new Guid(
                    GridView1.SelectedRow.Cells[1].Text);
                // Find the Employee.
                ObjectParameter param = new ObjectParameter("p", empId);

                Employees employee = HRSkills.Employees.Where(
                    "it.EmployeeId = @p", param).First();

                employee.Skills.Load();

                GridView2.Caption = "Skills of "
                    + employee.FirstName + " " +
                    employee.LastName;

                GridView2.AutoGenerateSelectButton = true;
                GridView2.DataSource = employee.Skills;
                GridView2.DataBind();
                GridView2.Focus();

                // Find Employee references.
                employee.References.Load();

                GridView3.AutoGenerateSelectButton = false;
                GridView3.Caption = "References for "
                    + employee.FirstName + " " +
                    employee.LastName;

                GridView3.DataSource = employee.References;
                GridView3.DataBind();
            }


        }

        protected void GridView2_SelectedIndexChanged(object sender,
            EventArgs e)
        {
            string connectionStr =
                Application.Contents["connectionString"] as string;

            using (HRSkillsEntities HRSkills = new HRSkillsEntities())
            {
                // Create a ObjectParameter from the SkillId property 
                // and get the Skill.
                Guid skillId = new Guid(
                    GridView2.SelectedRow.Cells[1].Text);

                ObjectParameter param =
                    new ObjectParameter("p", skillId);

                Skills skill = HRSkills.Skills.Where("it.SkillId = @p",
                    param).First();

                // Load the SkillInfo entities using 
                // SkillInfo_Skill association.
                skill.SkillInfo.Load();

                GridView3.AutoGenerateSelectButton = true;
                GridView3.DataSource = skill.SkillInfo;
                GridView3.DataBind();
                GridView3.Caption = "Skills URLs for " +
                    GridView2.SelectedRow.Cells[2].Text;
                GridView3.Focus();
            }

        }
        protected void TextBox1_TextChanged(object sender, EventArgs e)
        {
            GridView1.SelectedIndex = -1;
            GridView2.SelectedIndex = -1;
            GridView3.SelectedIndex = -1;

            string connectionStr =
                Application.Contents["connectionString"] as string;

            using (HRSkillsEntities HRSkills = new HRSkillsEntities())
            {
                if ("*".Equals(TextBox1.Text))
                {
                    GridView1.Caption = "All Employees in System";
                    GridView1.AutoGenerateSelectButton = true;
                    GridView1.DataSource = 
                        HRSkills.Employees.Execute(
                        MergeOption.OverwriteChanges);
                    GridView1.DataBind();

                    TextBox1.Text = "";
                    return;
                }
                ObjectParameter param =
                    new ObjectParameter("p", TextBox1.Text.ToUpper());

                ObjectQuery<Employees> dbQuery = 
                    HRSkills.Employees.Where(
                    "SqlServer.SUBSTRING(it.LastName, 1, 1) = @p",
                    param);

                GridView1.Caption = "Employees' last name on: " +
                    TextBox1.Text.ToUpper();
                GridView1.AutoGenerateSelectButton = true;
                GridView1.DataSource = 
                    dbQuery.Execute(MergeOption.OverwriteChanges);
                GridView1.DataBind();
            }
            TextBox1.Text = "";
        }

        protected void TextBox2_TextChanged(object sender, EventArgs e)
        {
            string connectionStr =
                Application.Contents["connectionString"] as string;

            using (HRSkillsEntities HRSkills = new HRSkillsEntities())
            {
                GridView1.SelectedIndex = -1;
                GridView2.SelectedIndex = -1;
                GridView3.SelectedIndex = -1;

                if ("*".Equals(TextBox2.Text))
                {
                    GridView2.Caption = "All Skills in System.";
                    GridView2.AutoGenerateSelectButton = true;
                    GridView2.DataSource = 
                        HRSkills.Skills.Execute(
                        MergeOption.OverwriteChanges );
                    GridView2.DataBind();
                    GridView1.DataSource = null;
                    GridView1.DataBind();

                    TextBox2.Text = "";
                    return;
                }

                // Create ObjectParameter from each keyword 
                // and search properties of Skills.

                ObjectParameter param = new ObjectParameter(
                    "p", "%" + TextBox2.Text.Trim(
                    '\"', '&', '%', '$', '#') + "%");

                ObjectQuery<Skills> skillsQuery =
                    HRSkills.Skills.Where(
                    "it.BriefDescription Like @p " +
                    "OR it.SkillName Like @p", param);

                List<Employees> employeeList = new List<Employees>();
                foreach (Skills skill in skillsQuery)
                {
                    skill.EmployeesReference.Load();
                    employeeList.Add(skill.Employees);
                }

                GridView1.Caption = "Employees with skills on " +
                    TextBox2.Text;
                GridView1.AutoGenerateSelectButton = true;
                GridView1.DataSource = employeeList;
                GridView1.DataBind();

                GridView2.Caption = "Skills on " +
                    TextBox2.Text;
                GridView2.AutoGenerateSelectButton = true;
                GridView2.DataSource = 
                    skillsQuery.Execute(MergeOption.OverwriteChanges);
                GridView2.DataBind();
            }
            TextBox2.Text = "";
        }

        protected void GridView3_SelectedIndexChanged(object sender,
            EventArgs e)
        {
            string scriptString = @"<script> window.open('" +
                GridView3.SelectedRow.Cells[2].Text +
                "', left=100)</script>";
            if (!ClientScript.IsClientScriptBlockRegistered("PopUpWindow"))
                ClientScript.RegisterClientScriptBlock(GridView3.GetType(),
                    "PopUpWindow", scriptString);
        }

        protected void Page_Load(object sender, EventArgs e)
        {

        }
    }
}

См. также

Основные понятия

Приложение Human Resources Skills для Windows (образец приложения модели EDM)