بایگانی

نوشته های برچسب زده شده ‘asp.net’

پرسش‌های متداول درباره ASP.NET Membership

۲۱ مرداد ۱۳۸۸ ۳ دیدگاه

توضیح: این یادداشت به تدریج تکمیل و به روز خواهد شد، لطفاً اگر سوال یا ابهامی در مورد نحوه کار با ASP.NET Membership داشتید کامنت بگذارید.

اغلب کسانی به تازگی با ASP.NET آشنا می‌شوند در استفاده از امکانات membership سوالات و مشکلاتی دارند که در این نوشته به برخی از آن‌ها نگاهی می‌اندازیم.

حذف ASPNETDB
به صورت پیش فرض وقتی شما از یکی از کنترل‌های مربوط به ASP.NET Membership مثلاً CreateUserWizard استفاده می‌کنید یک دیتابیس به نام ASPNETDB در پوشه App_Data ساخته می‌شود.
اگر می‌خواهید از دیتابیسی که خودتان ساخته‌اید برای کار با ASP.NET Membership استفاده کنید باید کارهای زیر را انجام بدهید:

۱-commnad prompt ویژوال استودیو را اجرا کنید و در آن دستور aspnet_regsql را بنویسید، در پنجره‌ای که باز می‌شود دیتابیسی که می‌خواهید از membership در آن استفاده کنید را مشخص کنید تا جداول و دیگر موارد مربوط به membership به آن اضافه شود. توضیحات بیشتر…

۲-یک Connection String در web.config خودتان برای دیتابیسی که ساخته‌اید ایجاد کنید.

<connectionStrings>
   <add name="MyConnection"   
   connectionString="Your_Connection_string"
   providerName="System.Data.SqlClient" />
</connectionStrings>

3-حالا باید به اجزای مختلف ASP.NET Membership بگویید که با استفاده از connection string ای که در مرحله قبل ساختید به دیتابیس شما متصل شوند. به عنوان مثال:

<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
   <providers>
      <add name="SqlProvider"
       type="System.Web.Security.SqlMembershipProvider"
       connectionStringName="MyConnection" applicationName="/"/>
   </providers>
</membership>

این کار را می‌توانید برای دیگر اجزای membership‌ مثل rolemanager و profile هم انجام دهید.

پیدا کردن UserId

فرض کنید در وب سایت یا برنامه‌ای که در حال پیاده‌سازی آن هستید رابطه (relation) بین جداول ساخته شده توسط شما و جداول asp.net membership وجود دارد. معمولاً این رابطه با جدول aspnet_Users و با فیلد UserId است. حالا در برنامه‌تان باید به شکلی UserId را پیدا کنید. تابع زیر با گرفتن یک username به عنوان پارامتر userId آن کاربر را به شکل رشته برمی‌گرداند:

public string GetUserId(string userName)
{
  MembershipUser myObject = Membership.GetUser(userName);
  string UserID = myObject.ProviderUserKey.ToString();
  return UserID;
}

حذف Security Quesion‌ و Security Answer

حذف Security Question و Security Answer و همچنین تغییر قانون مربوط به کلمه عبور نیز از جمله سوالات متداول مربوط به ASP.NET Membership است. این کار را می‌توانید از طریق ویرایش provider ای که برای membership‌ در web.config تعریف کرده‌اید انجام دهید:

<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20">
 <providers>
   <add name="SqlProvider"
    type="System.Web.Security.SqlMembershipProvider"
    connectionStringName="MyConnection"
    minRequiredPasswordLength="5"
    minRequiredNonalphanumericCharacters="0"
    requiresQuestionAndAnswer="false"
    applicationName="/"/>
 </providers>
</membership>

در مثال بالا membership برای کلمات عبوری با حداقل طول ۵ کاراکتر و بدون نیاز به کاراکترهای غیرحرف و عددی و همین‌طور برای عدم استفاده از Security Question و Security Answer تنظیم شده است.

ویرایش پروفایل کاربران دیگر

ویرایش پروفایل کاربر جاری به راحتی امکان پذیر است، اما برای ویرایش پروفایل دیگر کاربران می‌توانید از تابع زیر استفاده کنید. قبل از هر چیز فرض می‌کنیم دو property تحت عنوان‌های Name و Family به پروفایل در web.config اضافه کرده‌ایم:

<profile automaticSaveEnabled="false" enabled="true">
  <properties>
    <add name="Name"/>
    <add name="Family"/>
  </properties>
</profile>

تابع زیر username کاربر را به عنوان ورودی گرفته و تغییرات داده شده روی نام و نام خانوادگی کاربر(که قبلاً در web.config تعریف شده‌اند) را در پروفایل کاربر ثبت می‌کند، شما می‌توانید این تابع را با توجه به نیاز خود و فیلدهای پروفایلی که تعریف کرده‌اید سفارشی کنید:

private void UpdateProfile(string userName)
{
   ProfileCommon userProfile = Profile.GetProfile(userName);
   userProfile.Name = txtName.Text;
   userProfile.Family = txtFamily.Text;
   userProfile.Save();
}

با استفاده از کد بالا می‌توانید یک فرم ثبت‌نام سفارشی برای خودتان بسازید که شامل نام‌ کاربری، کلمه عبور، پست الکترونیک، نام و نام خانوادگی است. اگر پنج textbox برای هریک از این فیلدها داشته باشید کد شما برای اضافه کردن یک کاربر، به همراه نام و نام خانوادگی به شکل زیر خواهد بود:

private void Register()
{
 //Add User
 MembershipUser newUser =
  Membership.CreateUser(txtUsername.Text, txtPassword.Text, txtEmail.Text);
 Membership.UpdateUser(newUser);
 //Add Name and Family
 ProfileCommon userProfile = Profile.GetProfile(txtUsername.Text);
 userProfile.Name = txtName.Text;
 userProfile.Family = txtFamily.Text;
 userProfile.Save();
}

Custom Paging در GridView به کمک LINQ

۱۲ مرداد ۱۳۸۸ ۵ دیدگاه

download دریافت کد این نوشته 

LINQ چیست؟
LINQ که سرنام Language Integrated Query است یک روش جدید در دات نت برای انجام پرس و جو روی انواع داده‌هاست.
برای آشنایی بیشتر با LINQ مطالب زیر را که نوشته حامد بنایی است مطالعه کنید:
+ LINQ بخش اول
+ LINQ بخش دوم – LINQ to SQL

Custom Paging چیست؟
در دات نت وقتی بخواهیم لیستی از اطلاعات را نشان بدهید از کنترل‌هایی نظیر GridView استفاده می‌کنیم. اگر تعداد رکوردها زیاد باشد از قابلیت paging در GridView استفاده می‌شود. به کمک paging رکوردها در صفحاتی که سایزشان را مشخص می‌کنیم نمایش داده می‌شوند.

Gridview Paging

به طور پیش فرض در paging عادی تمام رکوردها از بانک اطلاعاتی دریافت می‌شوند و در هر صفحه فقط بخشی از رکوردها که مورد نیاز هستند نمایش داده می‌شوند. Custom Paging یک روش سفارشی برای انجام صفحه بندی است که در آن در هر صفحه از GridView فقط رکوردهای مربوط به همان صفحه از بانک اطلاعاتی دریافت می‌شوند.
به عنوان مثال فرض کنید ما ۱۰۰ رکورد داریم و می‌خواهیم آن‌ها را در یک GridView صفحه بندی کنیم. سایز صفحات را هم ۲۰ رکورد در نظر گرفته‌ایم، بنابراین ۵ صفحه خواهیم داشت. در روش paging‌ عادی وقتی در حال تماشای صفحه دوم هستیم (رکوردهای ۲۱ تا ۴۰) تمام ۱۰۰ رکورد از بانک اطلاعاتی دریافت می‌شود ولی فقط رکوردهای ۲۱ تا ۴۰ در GridView‌ نمایش داده می‌شوند.
در روش Custom Paging اما در صفحه دوم فقط رکوردهایی که نیاز داریم نمایش داده بشوند (رکوردهای ۲۱ تا ۴۰) از بانک اطلاعاتی دریافت می‌شوند. این یک روش بهینه است و البته کارآیی و سرعت برنامه را به خصوص در حجم اطلاعات بالا بسیار افزایش می‌دهد.

Custom Paging به کمک LINQ
قبل از هر چیز Visual Studio‌ را باز کنید و یک Web Site جدید بسازید.
ابتدا فرض می‌کنیم یک جدول در بانک اطلاعاتی به نام City‌ داریم با دو فیلد CityId از نوع int و CityName‌ از نوعnvarchar 50 . حالا یک LINQ to SQL Class به نام City می‌سازیم و جدول City را از بانک اطلاعاتی به آن اضافه می‌کنیم:

City Table

در پوشه App_Code وب سایت یک کلاس جدید به نام CityClass ایجاد می‌کنیم. در این کلاس می‌خواهیم متدهای لازم برای Custom Paging را به شرح زیر بنویسیم:

    public IQueryable BindGrid(int startRowIndex, int maximumRows)
    {
        CityDataContext db = new CityDataContext();
        var query = from c in db.Cities select c;
        return query.Skip(startRowIndex).Take(maximumRows);
    }

    public int GetCityCount()
    {
        CityDataContext db = new CityDataContext();
        return (from c in db.Cities select c).Count();
    }

حالا می‌رسیم به بخش نمایش کار. یک GridView و یک ObjectDataSource به صفحه‌مان اضافه می‌کنیم.

Enable Paging کنترل GridView را علامت بزنید و Datasource آن را ObjectDataSource1 انتخاب کنید

Gridview Config

حالا نوبت به تنظیم ObjectDataSource‌ می‌رسد. TypeName همان نام کلاسی که قبلاً ایجاد کردیم یعنی CityClass، همچنین نام دو متدی را که در CityClass نوشته بودیم به عنوان SelectCountMethod و SelectMethod اضافه می‌کنیم. فراموش نکنید که Enable Paging را هم true کنید.

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
        EnablePaging="true" SelectCountMethod="GetCityCount"
        SelectMethod="BindGrid" TypeName="CityClass" />

تمام شد! سایت را اجرا کنید و نتیجه کار را ببینید.

Vote on iDevCenter