ورود / ثبت نام
0
0

عضویت و مدیریت اعضا در ASP.NET

309 بازدید
مدیریت اعضا

مدیریت اعضا

این اپلیکیشن به شما نشان می دهد که چگونه اپلیکیشن Wingtip Toys نمونه را برای اضافه کردن یک نقش خاص و شناسایی ASP.NET بروز رسانی کنید. هم چنین به شما نشان می دهد که چگونه یک صفحه مدیریت اجرا کنید که یک کاربر با نقش سفارشی (custom) بتواند محصولات را از سایت حذف و یا اضافه کند.

مدیریت اعضا

ASP.NET Identity یک سیستم عضویت می باشد که برای ساخت وب اپلیکیشن استفاده می شود و در ۴.۵ASP.NET موجود می باشد. ASP.NET Identity در وب فرم های قالب پروژه (Web Forms project template) 2013Visual Studio استفاده می شود، درست ماننده قالب های ASP.NET MVC، ASP.NET Web API وASP.NET Single Page Application. هم چنین شما می توانید ASP.NET Identity system را با استفاده از NuGet زمانی که با یک وب اپلیکیشن خالی شروع می کنید، نصب کنید.

روش هایی که یاد خواهید گرفت:

چگونه از کد برای اضافه کردن یک نقش خاص (custom) و کاربر به اپلیکیشن اضافه کرد.

چگونگی محدود کردن دسترسی به صفحه و پوشه مدیریت (administration)

چگونگی فراهم کردن navigation (جهت یاب) برای کاربرانی که نقش خاص (custom ) دارند.

چگونگی استفاده از model binding برای populate یک DropDownList control با گروه بندی های محصولات

چگونگی آپلود یک فایل در وب اپلیکیشن با استفاده از FileUpload control.

چگونگی استفاده از validation controls (کنترل اعتبار) برای اجرای input validation (ورودی اعتبار).

چگونگی اضافه کردن و حذف کردن محصول

ویژگی های زیر نیز شامل این مقاله می باشند

ASP.NET Identity

Configuration and Authorization

Model Binding

Unobtrusive Validation

وب فرم های ASP.NET قابلیت های عضویت را فراهم می کنند. با استفاده از قالب پیش فرض، یک قابلیت عضویت ساخته اید که وقتی اپلیکیشن اجرا شود می توانید بلافاصله از آن استفاده کنید.

اضافه کردن نقش های سفارشی

با استفاده از ASP.NET Identity، می توانید یک نقش سفارشی اضافه کنید و با استفاده از کد یک کاربر را به آن اختصاص دهید.

در Solution Explorer، روی Logic folder کلیک راست کنید و یک کلاس جدید بسازید.

اسم آن را RoleActions.cs بگذارید.

کد را اصلاح کنید تا به صورت زیر تبدیل شود:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WingtipToys.Logic
{
  internal class RoleActions
  {
  }
}

در Solution Explorer، فایل Global.asax.cs را باز کنید.

فایل Global.asax.cs را با اضافه کردن کد برجسته شده اصلاح کنید.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Optimization;
using System.Web.Routing;
using System.Web.Security;
using System.Web.SessionState;
using System.Data.Entity;
using WingtipToys.Models;
using WingtipToys.Logic;

namespace WingtipToys
{
    public class Global : HttpApplication
    {
        void Application_Start(object sender, EventArgs e)
        {
          // Code that runs on application startup
          RouteConfig.RegisterRoutes(RouteTable.Routes);
          BundleConfig.RegisterBundles(BundleTable.Bundles);

          // Initialize the product database.
          Database.SetInitializer(new ProductDatabaseInitializer());

          // Create the custom role and user.
          RoleActions roleActions = new RoleActions();
          roleActions.AddUserAndRole();
        }
    }
}

توجه داشته باشید که AddUserAndRole با خط قرمر underlined شده باشد. روی کد AddUserAndRole دوبار کلیک کنید.

حرف “A” در ابتدای متود برجسته شده underlined می شود.

روی UI کلیک کنید که به شما اجازه می دهد یک روش برای AddUserAndRole تولید کنید.

مدیریت اعضا

روی گزینه titled کلیک کنید.

Generate method stub for “AddUserAndRole” in “WingtipToys.Logic.RoleActions

فایل RoleActions.cs را از Logic folder باز کنید.

متود AddUserAndRole به فایل کلاس (class file ) اضافه شده است.

فایل RoleActions.cs را با حدف کردن NotImplementedeException و اضافه کردن کد هایلایت شده زیر اصلاح کنید، تا به شکل زیر تبدیل شود.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using WingtipToys.Models;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;

namespace WingtipToys.Logic
{
  internal class RoleActions
  {
    internal void AddUserAndRole()
    {
      // Access the application context and create result variables.
      Models.ApplicationDbContext context = new ApplicationDbContext();
      IdentityResult IdRoleResult;
      IdentityResult IdUserResult;

      // Create a RoleStore object by using the ApplicationDbContext object. 
      // The RoleStore is only allowed to contain IdentityRole objects.
      var roleStore = new RoleStore<IdentityRole>(context);

      // Create a RoleManager object that is only allowed to contain IdentityRole objects.
      // When creating the RoleManager object, you pass in (as a parameter) a new RoleStore object. 
      var roleMgr = new RoleManager<IdentityRole>(roleStore);

      // Then, you create the "canEdit" role if it doesn't already exist.
      if (!roleMgr.RoleExists("canEdit"))
      {
        IdRoleResult = roleMgr.Create(new IdentityRole { Name = "canEdit" });
      }

      // Create a UserManager object based on the UserStore object and the ApplicationDbContext  
      // object. Note that you can create new objects and use them as parameters in
      // a single line of code, rather than using multiple lines of code, as you did
      // for the RoleManager object.
      var userMgr = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
      var appUser = new ApplicationUser
      {
        UserName = "canEditUser@wingtiptoys.com",
        Email = "canEditUser@wingtiptoys.com"
      };
      IdUserResult = userMgr.Create(appUser, "Pa$$word1");

      // If the new "canEdit" user was successfully created, 
      // add the "canEdit" user to the "canEdit" role. 
      if (!userMgr.IsInRole(userMgr.FindByEmail("canEditUser@wingtiptoys.com").Id, "canEdit"))
      {
        IdUserResult = userMgr.AddToRole(userMgr.FindByEmail("canEditUser@wingtiptoys.com").Id, "canEdit");
      }
    }
  }
}

کد بالا ابتدا یک پایگاه داده محتوا (database context) برای پایگاه داده عضویت تاسیس می کند. هم چنین پایگاه داده عضویت ها در یک پوشه .mdf file in the App_Data ذخیره می شود. شما قادر خواهید که این پایگاه داده را مشاهده کنید زمانی که اولین کاربر وارد اپ شود.

کلمه عبور وردوی (internal) یک دسترسی سریع به انواع (کلاس) و نوع عضوها (متودها و ویژگی ها) می باشد. انواع و عضوهای ورودی فقط با فایلی که شامل .dll file باشد قابل دسترسی است. زمانی که شما اپلیکشین خود را ساختید یک فایل assembly (.dll) ساخته می شود که شامل کدی است که وقتی اگ را اجرا کنید، کد نیز شروع به کار می کند.

در مرحله بعد، RoleManager بر اساس RoleStore که شما ایجاده کرده بودید ساخته می شود. RoleManager، role های مرتبط با API که می توان از آن به عنوان ذخیره خودکار تغییرات RoleStore. استفاده کرد را در معرض نمایش قرار می دهد. RoleManager فقط می تواند شامل IdentityRole باشد چرا که کد ما از نوع <IdentityRole> Generic استفاده می کند.

باید متود RoleExists را فراخوانید که مطمئن شوید که “canEdit” در پایگاه داده عضویت ها موجود است. ایجاد UserManager کمی سخت تر و پیچیده تر از RoleManager می باشد اما تقریبا مشابه آن است.

سپس شما باید canEditUser را ایجاد کنید با ایجاد یک ApplicationUser جدید. سپس، اگر به صورت موفقیت آمیز کاربر را بسازید، می توانید کاربر را به role اضافه کنید.

در دفعه بعدی که اپ اجرا شود کاربر canEditUser به عنوان role اضافه می شود با نام canEdit.

محدود کردن دسترسی به صفحه مدیریت

اپلیکیشن نمونه Wingtip به هر دو کاربران نا شناس و ثبت نام کرده اجازه می دهد که محصولات را ببینند و بخرند. اگرچه، کاربران ثبت نام کرده که نقش canEdit را دارند می توانند جهت حذف و یا اضافه محصول به صفحات محدود دسترسی پیدا کنند.

اضافه کردن صفحه و پوسه مدیریت

در مرحله بعد، یک پوشه با نام Admin برای canEditUser ایجاد می کنید. کاربری که متعلق به نقش خاص Wingtip Toys اپلیکیشن نمونه می باشد.

روی نام پروژه (Wingtip Toys) در Solution Explorer کلیک راست کنید و Add -> New Folder را انتخاب کنید.

اسم پروژه جدید را Adminبگزارید.

روی پوسه Admin کلیک راست کنید و Add -> New Item را انتخاب کنید.

جعبه (باکس) دیالوگ Add New Item نمایش داده می شود.

گروه قالب های Visual C# -> Web را از سمت چپ انتخاب کند. از لیست وسطWeb Form with Master Page را انتخاب کنید و نام آن را AdminPage.aspx بگزارید و سپس آن را اضافه کنید.

فایل Site.Master را به عنوان صفحه master انتخاب کنید و ان را تایید کنید.

اضافه کردن فایل Web.config

با اضافه کردن فایل Web.config به پوشه Admin ، می توانید دسترسی به صفحات موجود در پوشه را محدود کنید.

روی پوشه Admin کلیک راست کنید و Add -> New Item folder را انتخاب کنید.

از لیست Visual C# web templates، Web Configuration File را انتخاب کنید، اسم پیش فرض Web.config را تایید کنید و سپس آن را اضافه کنید.

کد موجود در Web.config را با کد زیر تعویض کنید.

xml version="1.0"?>
<configuration>
  <system.web>
    <authorization>
      <allow roles="canEdit"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</configuration>

فایل Web.config را ذخیره کنید. فایل Web.config تعیین می کند که فقط کاربری که متعلق به canEdit اپلیکیشن است می تواند به صفحه شامل پ.شه Admin دسترسی پیدا کند.

Including Custom Role Navigation

برای اجازه دادن به کاربر جهت راه یابی به بخش مدیریت اپلیکیشن، باید یک لینک به صفحه Site.Master اضافه کنید. فقط کاربری که متعلق به نقش canEdit باشد قادر خواهد بود لینک Admin را ببیند و به بخش مدیریت دسترسی پیدا کند.

در Solution Explorer، صفحه Site.Master را پیدا و باز کنید.

برای ایجاد یک لینک برای کاربر canEdit، کد برجسته شده زیر را اضافه کنید.

<ul class="nav navbar-nav">
    <li><a runat="server" id="adminLink" visible="false" 
      href="~/Admin/AdminPage">Admin</a></li>
    <li><a runat="server" href="~/">Home</a></li>
    <li><a runat="server" href="~/About">About</a></li>
    <li><a runat="server" href="~/Contact">Contact</a></li>
    <li><a runat="server" href="~/ProductList">Products</a></li>
    <li><a runat="server" href="~/ShoppingCart" 
      ID="cartCount">&nbsp;</a></li>
</ul>

فایل Site.Master.cs را باز کنید و لینک Admin را فقط برای کاربر canEditUser با اضفه کردن کد هایلایت شده به Page_Load قابل رویت کنید.

protected void Page_Load(object sender, EventArgs e)
{
  if (HttpContext.Current.User.IsInRole("canEdit"))
  {
    adminLink.Visible = true;
  }
}

زمانی که صفحه بارگزاری شود، کد چک می کند که کاربر وارد شده نقش canEdit را دارد یا خیر. اگر کاربر متعلق به canEdit باشد، span element شامل لینک به صفحه AdminPage.aspx نمایان می شود.

فعال کردن مدیریت محصول

رمانی که شما نقش canEdit را ساختید، کاربر canEditUser را، پوشه مدیریت و صفحه مدیریت را ساختید. باید حق دسترسی به صفحه و پوشه مدیریت را تنظیم کنید. و یک لینک navigation link به کاربر canEdit اضافه کنید. در مرحله بعد markup را به صفحه AdminPage.aspx و کد را به فایل code-behind AdminPage.aspx.cs اضافه کنید که کاربر را قادر می سازد که محصولات را اضفه و یا حذف کند.

در Solution Explorer، فایل AdminPage.aspx را از پوشه Admin باز کنید.

کد زیر را با کد موجود تعویض کنید.

Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="AdminPage.aspx.cs" Inherits="WingtipToys.Admin.AdminPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
    <h1>Administration</h1>
    <hr />
    <h3>Add Product:</h3>
    <table>
        <tr>
            <td><asp:Label ID="LabelAddCategory" runat="server">Category:</asp:Label></td>
            <td>
                <asp:DropDownList ID="DropDownAddCategory" runat="server" 
                    ItemType="WingtipToys.Models.Category" 
                    SelectMethod="GetCategories" DataTextField="CategoryName" 
                    DataValueField="CategoryID" >
                </asp:DropDownList>
            </td>
        </tr>
        <tr>
            <td><asp:Label ID="LabelAddName" runat="server">Name:</asp:Label></td>
            <td>
                <asp:TextBox ID="AddProductName" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" Text="* Product name required." ControlToValidate="AddProductName" SetFocusOnError="true" Display="Dynamic"></asp:RequiredFieldValidator>
            </td>
        </tr>
        <tr>
            <td><asp:Label ID="LabelAddDescription" runat="server">Description:</asp:Label></td>
            <td>
                <asp:TextBox ID="AddProductDescription" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" Text="* Description required." ControlToValidate="AddProductDescription" SetFocusOnError="true" Display="Dynamic"></asp:RequiredFieldValidator>
            </td>
        </tr>
        <tr>
            <td><asp:Label ID="LabelAddPrice" runat="server">Price:</asp:Label></td>
            <td>
                <asp:TextBox ID="AddProductPrice" runat="server"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" Text="* Price required." ControlToValidate="AddProductPrice" SetFocusOnError="true" Display="Dynamic"></asp:RequiredFieldValidator>
                <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" Text="* Must be a valid price without $." ControlToValidate="AddProductPrice" SetFocusOnError="True" Display="Dynamic" ValidationExpression="^[0-9]*(\.)?[0-9]?[0-9]?$"></asp:RegularExpressionValidator>
            </td>
        </tr>
        <tr>
            <td><asp:Label ID="LabelAddImageFile" runat="server">Image File:</asp:Label></td>
            <td>
                <asp:FileUpload ID="ProductImage" runat="server" />
                <asp:RequiredFieldValidator ID="RequiredFieldValidator4" runat="server" Text="* Image path required." ControlToValidate="ProductImage" SetFocusOnError="true" Display="Dynamic"></asp:RequiredFieldValidator>
            </td>
        </tr>
    </table>
    <p></p>
    <p></p>
    <asp:Button ID="AddProductButton" runat="server" Text="Add Product" OnClick="AddProductButton_Click"  CausesValidation="true"/>
    <asp:Label ID="LabelAddStatus" runat="server" Text=""></asp:Label>
    <p></p>
    <h3>Remove Product:</h3>
    <table>
        <tr>
            <td><asp:Label ID="LabelRemoveProduct" runat="server">Product:</asp:Label></td>
            <td><asp:DropDownList ID="DropDownRemoveProduct" runat="server" ItemType="WingtipToys.Models.Product" 
                    SelectMethod="GetProducts" AppendDataBoundItems="true" 
                    DataTextField="ProductName" DataValueField="ProductID" >
                </asp:DropDownList>
            </td>
        </tr>
    </table>
    <p></p>
    <asp:Button ID="RemoveProductButton" runat="server" Text="Remove Product" OnClick="RemoveProductButton_Click" CausesValidation="false"/>
    <asp:Label ID="LabelRemoveStatus" runat="server" Text=""></asp:Label>
</asp:Content

در مرحله بعد، فایل کد AdminPage.aspx.cs را با کلیک راست روی AdminPage.aspx باز کنید و روی View Code کلیک کنید.

کد زیر را با فایل کد AdminPage.aspx.cs جابه جا کنید.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WingtipToys.Models;
using WingtipToys.Logic;

namespace WingtipToys.Admin
{
  public partial class AdminPage : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      string productAction = Request.QueryString["ProductAction"];
      if (productAction == "add")
      {
        LabelAddStatus.Text = "Product added!";
      }

      if (productAction == "remove")
      {
        LabelRemoveStatus.Text = "Product removed!";
      }
    }

    protected void AddProductButton_Click(object sender, EventArgs e)
    {
      Boolean fileOK = false;
      String path = Server.MapPath("~/Catalog/Images/");
      if (ProductImage.HasFile)
      {
        String fileExtension = System.IO.Path.GetExtension(ProductImage.FileName).ToLower();
        String[] allowedExtensions = { ".gif", ".png", ".jpeg", ".jpg" };
        for (int i = 0; i < allowedExtensions.Length; i++)
        {
          if (fileExtension == allowedExtensions[i])
          {
            fileOK = true;
          }
        }
      }

      if (fileOK)
      {
        try
        {
          // Save to Images folder.
          ProductImage.PostedFile.SaveAs(path + ProductImage.FileName);
          // Save to Images/Thumbs folder.
          ProductImage.PostedFile.SaveAs(path + "Thumbs/" + ProductImage.FileName);
        }
        catch (Exception ex)
        {
          LabelAddStatus.Text = ex.Message;
        }

        // Add product data to DB.
        AddProducts products = new AddProducts();
        bool addSuccess = products.AddProduct(AddProductName.Text, AddProductDescription.Text,
            AddProductPrice.Text, DropDownAddCategory.SelectedValue, ProductImage.FileName);
        if (addSuccess)
        {
          // Reload the page.
          string pageUrl = Request.Url.AbsoluteUri.Substring(0, Request.Url.AbsoluteUri.Count() - Request.Url.Query.Count());
          Response.Redirect(pageUrl + "?ProductAction=add");
        }
        else
        {
          LabelAddStatus.Text = "Unable to add new product to database.";
        }
      }
      else
      {
        LabelAddStatus.Text = "Unable to accept file type.";
      }
    }

    public IQueryable GetCategories()
    {
      var _db = new WingtipToys.Models.ProductContext();
      IQueryable query = _db.Categories;
      return query;
    }

    public IQueryable GetProducts()
    {
      var _db = new WingtipToys.Models.ProductContext();
      IQueryable query = _db.Products;
      return query;
    }

    protected void RemoveProductButton_Click(object sender, EventArgs e)
    {
      using (var _db = new WingtipToys.Models.ProductContext())
      {
        int productId = Convert.ToInt16(DropDownRemoveProduct.SelectedValue);
        var myItem = (from c in _db.Products where c.ProductID == productId select c).FirstOrDefault();
        if (myItem != null)
        {
          _db.Products.Remove(myItem);
          _db.SaveChanges();

          // Reload the page.
          string pageUrl = Request.Url.AbsoluteUri.Substring(0, Request.Url.AbsoluteUri.Count() - Request.Url.Query.Count());
          Response.Redirect(pageUrl + "?ProductAction=remove");
        }
        else
        {
          LabelRemoveStatus.Text = "Unable to locate product.";
        }
      }
    }
  }
}

صفحه AdminPage.aspx به کاربر متعلق به canEdit اجازه می دهد که محصولات را حذف و یا اضافه کند. وقتی یک محصول جدید اضافه شود، اطلاعات مربوط به محصول معتبر می شوند و وارد پایگاه داده می شوند.

Unobtrusive Validation اعتبارسنجی

اطلاعات محصول که در صفحه AdminPage.aspx ارائه می شوند با استفاده از کنترل اعتبار (RequiredFieldValidatorand RegularExpressionValidator) معتبر می شود. این کنترل ها به صورت خودکار از اعتبار سنجی استفاده می کنند. اعتبار سنجی به کنترل اعتبار اجازه می دهد از client-side validation logic جاوا اسکریپت استفاده کند.

که بدین معنا می باشد که لازم نیست صفحه برای اعتبارسنجی اطلاعات را به سرور بفرستد. و به صورت پیش فرض، unobtrusive validation در فایل Web.config بر اساس تنظیمات configuration زیر قرار می گیرد.

<add key="ValidationSettings:UnobtrusiveValidationMode" value="WebForms" />

Regular Expressions (عبارات منظم)

قیمت محصول در صفحه AdminPage.aspx با استفاده از کنترل RegularExpressionValidator معتبر می شود. کنترل RegularExpressionValidator شامل ویژگی با نام ValidationExpression می باشد که regular expression را دارد و برای اعتبارسنجی قیمت ورودی، به صورت زیر به کار می رود.

<asp:RegularExpressionValidator 
    ID="RegularExpressionValidator1" runat="server"
    Text="* Must be a valid price without $." ControlToValidate="AddProductPrice" 
    SetFocusOnError="True" Display="Dynamic" 
    ValidationExpression="^[0-9]*(\.)?[0-9]?[0-9]?$">
</asp:RegularExpressionValidator>

کنترل آپلود فایل (FileUpload)

شما علاوه بر وردی ها و کنترل های اعتبار، FileUpload را نیز به صفحه AdminPage.aspx اصافه کردید. این کنترل، قابلیت آپلود فایل را فراهم می کند. در این مورد، فقط به تصاویر اجازه آپلود می دهید. در فایل code-behind (AdminPage.aspx.cs)، وقتی که روی AddProductButton کلیک شود کد، ویژگی کنترل FileUpload، HasFile را چک می کند. اگر کنترل شامل یک فایل باشد و نوع فایل اجازه دسترسی داشته باشد، تصویر در پوشه Images و پوشه Images/Thumbs اپلیکیشن ذخیره می شود.

Model Binding

کدی که به فایل AdminPage.aspx اضافه کردید شامل کنترل DropDownList می باشد که DropDownAddCategory نامیده می شود.

  <asp:DropDownList ID="DropDownAddCategory" runat="server" 
        ItemType="WingtipToys.Models.Category" 
        SelectMethod="GetCategories" DataTextField="CategoryName" 
        DataValueField="CategoryID" >
    </asp:DropDownList>

ما از model binding برای populate، DropDownList با ویژگی ItemType و SelectMethod استفاده می کنیم. ویژگی ItemType مشخص می کند که از WingtipToys.Models.Category استفاده کنید. کلاس Category در پوشه Models درون فایلCategory.cs قرار دارد.

public class Category
    {
        [ScaffoldColumn(false)]
        public int CategoryID { get; set; }

        [Required, StringLength(100), Display(Name = "Name")]
        public string CategoryName { get; set; }

        [Display(Name = "Product Description")]
        public string Description { get; set; }

        public virtual ICollection<Product> Products { get; set; }
    }

ویژگی SelectMethod مشخص می کند که از GetCategories (در زیر نشان داده شده) استفاده کنید که شامل فایل code-behind (AdminPage.aspx.cs) می باشد.

public IQueryable GetCategories()
    {
      var _db = new WingtipToys.Models.ProductContext();
      IQueryable query = _db.Categories;
      return query;
    }

این متود تعیین می کند که رابط کاربری IQueryable برای ارزیابی یک query در مقابل Category به کار می رود. و از مقدار بازگشت شده برای populate، DropDownList استفاده می شود.

متنی که برای هر مرود نشان داده می شود توسط DataTextField نعیین می شود. که از CategoryName، کلاس Category برای نمایش هر گروه استفاده می کند. DataValueField با توجه به CategoryID تنظیم می شود.

نحوه کار کردن اپلیکشین

وقتی کاربری که به canEdit تعلق دارد برای اولین بار به صفحه هدایت شود DropDownAddCategory DropDownList همان تور که قبلا توضیح داده شد populated می شود. کاربر متعلق به canEdit نوع گروه را انتخاب می کند و اطلاعات محصول را اضفه می کند ماننده (اسم، توضیجات، قیمت و عکس) و زمانی که کاربر روی دکمه Add Product کلیک کند، AddProductButton_Click انجام می شود. کنترل رویداد های AddProductButton_Click در فایل code-behind (AdminPage.aspx.cs) قرار دارد و جهت اطمینان بیشتر تضویر را برسی می کند که با فرمت های مشخص شده (.gif, .png, .jpeg, or .jpg) هماهنگ است یا خیر. و تصویر در Wingtip Toys sample application دخیره می شود. و هم چنین محصول به پایگاه داده اضافه می شود. برای انجام اضافه کردن محصول جدید یک نمونه جدید از کلاس AddProducts به نام products ایجاد می شود.

/ Add product data to DB.
    AddProducts products = new AddProducts();
    bool addSuccess = products.AddProduct(AddProductName.Text, AddProductDescription.Text,
        AddProductPrice.Text, DropDownAddCategory.SelectedValue, ProductImage.FileName);

اگر کد محصول را با موفقییت به پایگاه داده اضافه کند، صفحه با query string value ProductAction=add بارگزاری مجدد می شود.

Response.Redirect(pageUrl + "?ProductAction=add");

زمانی که صفحه بارگزاری شد، query string مشمول URL می شود. با بارگزاری مجدد صفحه کاربر متعلق به canEdit می تواند بلافاصله تغییرات DropDownList کنترل را در صفحه AdminPage.aspx مشاهده کند.

protected void Page_Load(object sender, EventArgs e)
    {
        string productAction = Request.QueryString["ProductAction"];
        if (productAction == "add")
        {
            LabelAddStatus.Text = "Product added!";
        }

        if (productAction == "remove")
        {
            LabelRemoveStatus.Text = "Product removed!";
        }
    }

کنترل کننده رویداد های Page_Load مقادیر query string جهت اطمینان برای نمایش پیام برسی می کند.

اجرای اپلیکیشن

اکنون می توانید اپ را اجرا کنید و ببینید که چگونه می توانید به کارت خرید خود محصول اضافه و یا ححذف کنید و آن را بروز رسانی کنید. مقدار کل کارت خرید به روی مبلغ کل منعکس می شود.

در Solution Explorer، کلید F5 را جهت اجرای Wingtip Toys sample application فشار دهید.

در بالای صفحه روی لینک Log in کلیک کنید.

مدیریت اعضا

صفحه Login.aspx نمایش داده می شود.

از نام کاربری و کلمه عبور زیر استفاده کنید.

User name: canEditUser@wingtiptoys.com

Password: Pa$$word1

مدیریت اعضا

روی دکمه Log in کلیک کنید.

در بالای صفحه بعد، لینک Admin را جهت هدایت به صفحه AdminPage.aspx انتخاب کنید.

مدیریت اعضا

برای امتحان کردن اعتبار ورودی، فقط روی دکمه Add Product کلیک کنید.

مدیریت اعضا

برای محصول جدید اطلاعات اضافه کنید، و روی دکمه Add Product کلیک کنید.

مدیریت اعضا

Products را از منویnavigation بالا جهت مشاهده محصول جدید اضافه شده انتخاب کنید.

مدیریت اعضا

روی لینک Admin جهت باز گشت به صفحه ی مدیریت کلیک کنید.

در بخش Remove Product، محصول جدیدی که به DropDownListBox اضافه کردید را انتخاب کنید.

و روی Remove Product کلیک کنید تا محصول حذف از اپلیکیشن حذف شود.

مدیریت اعضا

Products را جهت اطمینان پیدا کردن از حرف شدن محصول انتخاب کنید.

و جهت خروج از حالت مدیریت Log off را انتخاب کنید.

موفق باشید !

  • پسورد: www.mspsoft.com
آیا این مطلب را می پسندید؟
https://www.mspsoft.com/?p=17125
اشتراک گذاری:
واتساپتوییترفیسبوکپینترستلینکدین
داریوش فرخی
داریوش فرخی هستم از سال 92 شروع به یادگیری برنامه نویسی و از سال 93 در بخش برنامه نویسی و تولید محتوای سایت mspsoft.com مشغول هستم. فعالیتم نیز بیشتر در زمینه های برنامه نویسی با سی شارپ و asp.net بوده است. اوقات فراغتم را هم غالبا با تماشای فیلم یا بازی های کامپیوتری پر میکنم .
مطالب بیشتر
برچسب ها:

نظرات

0 نظر در مورد عضویت و مدیریت اعضا در ASP.NET

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

هیچ دیدگاهی نوشته نشده است.