بایگانی برچسب: ASP.NET Core MVC

ASP.NET Core MVC جدید ترین فریم ورک برنامه نویسی شرکت مایکروسافت جهت ایجاد پروژه های تحت وب است

ساخت اشیاء انتقال داده یا DTOها

در این قسمت آموزش ASP MVC WEB Api به  ساخت اشیاء انتقال داده یا DTOها خواهیم پرداخت .

پست های قبلی آموزش ASP MVC Web Api

 

در حال حاضر، API تحت وب ما ساختمان داده انتیتی را در دسترس برنامه سمت کاربر قرار میدهد. کاربر داده‌هایی که مستقیما در جدول‌های ساختمان داده قرار دارند را دریافت می‌کند. هرچند، این مسئله همیشه هم خوب نیست. گاهی اوقات شما می‌خواهید شکل داده‌ای که به مشتری می‌فرستید را تغییر دهید. برای مثال، میخواهید:

 

  • Circular references را حذف کنید (قسمت قبل را مشاهده کنید)
  • ویژگی هایی خاصی که نمیخواهید مشتری آنها را ببیند را پنهان کنید.
  • برخی ویژگی‌ها را حذف کنید تا اندازه payload کاهش یابد.
  • گراف ها و نمودارهای اشیاء را به منظور درک ساده تر آنها توسط کاربر، ساده کنید.
  • از آسیب پذیری over-posting جلوگیری کنید .
  • لایه سرویس را از لایه پایگاه داده جدا کنید.

برای انجام این کار میتوانید یک شی انتقال داده یا DTO تعریف کنید. DTO شیء ایست که نحوه انتقال داده ها را بر روی شبکه مشخص میکند. بیایید ببینیم چگونه DTO با Book Entity کار میکند. در پوشه‌های Folder، دو کلاس DTO اضافه کنید.

namespace BookService.Models
{
    public class BookDTO
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string AuthorName { get; set; }
    }
}

namespace BookService.Models
{
    public class BookDetailDTO
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public int Year { get; set; }
        public decimal Price { get; set; }
        public string AuthorName { get; set; }
        public string Genre { get; set; }
    }
}

کلاس BookDetailDTO شامل تمامی ویژگی‌های مدل کتاب است. به جز AuthorName که نام نویسنده را در خود دارد. کلاس BookDTO شامل زیرمجموعه ویژگی‌های BookDetailDTO است.

آموزش ASP MVC WEB Api

در این مرحله، متدهای GET در کلاس BookController را با ورژن‌های شامل DTO جایگزین کنید. ما از LINQ  با عنوان Select استفاده میکنیم تا انتیتی‌های Book را به DTO تبدیل کنیم.

// GET api/Books
public IQueryable<BookDTO> GetBooks()
{
    var books = from b in db.Books
                select new BookDTO()
                {
                    Id = b.Id,
                    Title = b.Title,
                    AuthorName = b.Author.Name
                };

    return books;
}

// GET api/Books/5
[ResponseType(typeof(BookDetailDTO))]
public async Task<IHttpActionResult> GetBook(int id)
{
    var book = await db.Books.Include(b => b.Author).Select(b =>
        new BookDetailDTO()
        {
            Id = b.Id,
            Title = b.Title,
            Year = b.Year,
            Price = b.Price,
            AuthorName = b.Author.Name,
            Genre = b.Genre
        }).SingleOrDefaultAsync(b => b.Id == id);
    if (book == null)
    {
        return NotFound();
    }

    return Ok(book);
}

در اینجا SQL به دست آمده از متد جدید GetBooks را مشاهده میکنید. میتوانید ببینید که EF، بخش LINQ به نام Select را به عبارت  SQL SELECT ترجمه میکند.

SELECT 
    [Extent1].[Id] AS [Id], 
    [Extent1].[Title] AS [Title], 
    [Extent2].[Name] AS [Name]
    FROM  [dbo].[Books] AS [Extent1]
    INNER JOIN [dbo].[Authors] AS [Extent2] ON [Extent1].[AuthorId] = [Extent2].[Id]

در آخر، متد PostBook را اصلاح کنید تا DTO برگشت داده شود .

[ResponseType(typeof(Book))]
public async Task<IHttpActionResult> PostBook(Book book)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    db.Books.Add(book);
    await db.SaveChangesAsync();

    // New code:
    // Load author name
    db.Entry(book).Reference(x => x.Author).Load();

    var dto = new BookDTO()
    {
        Id = book.Id,
        Title = book.Title,
        AuthorName = book.Author.Name
    };

    return CreatedAtRoute("DefaultApi", new { id = book.Id }, dto);
}

 

آموزش asp mvc web api

الگوی ریپوزیتوری ( Repository Pattern ) در ASP.NET MVC

در این مقاله ، در مورد الگوی ریپوزیتوری (Repository Pattern ) که اغلب برای ایجاد برنامه های کاربردی اینتر پرایز استفاده می شود مطالبی می آموزیم. الگوی ریپوزیتوری می تواند UI برنامه، اجزای دسترسی به داده ها و Business logic را به لایه های مختلفی تقسیم می کند که به راحتی قابل نگهداری و قابل آزمایش هستند. این آموزش repository در mvc به صورت گام به گام می باشد.

برای درک بهتر الگوی ریپوزیتوری ، یک برنامه Client ایجاد خواهیم کرد. می توانیم هر نوع ساختار پروژه را برای اجرای الگوی ریپوزیتوری ایجاد کنیم. برای مثال، می توانیم یک کلاس ریپوزیتوری را در خود فولدر پروژه MVC ایجاد کنیم ، یا می توانیم پروژه ای در کلاس های مختلف ازlibrary را در به همان روش ایجاد کنیم یا می توانیم از معماری onion برای اجرای آن که شامل پروژه های کلاس های مختلفی از library و پروژه MVC در یک راه حل است را بکار گیریم.

برای سادگی کار، ما یک Repository class library و یک پروژه MVC را در یک سلوشن ایجاد خواهیم کرد. در الگوی ریپوزیتوری، می توانیم از ریپوزیتوری عمومی و کلی ( generic repository ) برای اجرای عملیات CRUD استفاده کنیم که می تواند برای اجرای عملیاتی خاص در entity ، توسط هر entity  از پروژه و ریپوزیتوری مرسوم استفاده شود. ابتدا یک کلاس Client در پروژه MVC ایجاد کنید.

namespace Client.Web.Models  
۰۲٫{  
۰۳٫    class Client  
۰۴٫    {  
۰۵٫        public int Id { get; set; }  
۰۶٫        public string Name { get; set; }  
۰۷٫        public string City { get; set; }  
۰۸٫        public string Email { get; set; }  
۰۹٫        public string Mobile { get; set; }  
۱۰٫    }  
۱۱٫}  

الگوی Repository در MVC

سپس، ما یک رابط ( interface ) را در پروژه ریپوزیتوری class library ایجاد خواهیم نمود. این رابط شامل عملیات عمومی پایگاه داده برای هر domain entity می باشد. ما آن را  IRepository نامگذاری می کنیم.

 

namespace Client.Repository  
۰۲٫{  
۰۳٫    public interface IRepository<T> where T:class  
۰۴٫    {  
۰۵٫        IEnumerable<T> SelectAll();  
۰۶٫        T SelectById(int id);  
۰۷٫        void Insert(T obj);  
۰۸٫        void Update(T obj);  
۰۹٫        void Delete(int id);  
۱۰٫        void Save();  
۱۱٫    }  
۱۲٫}  

سپس، یک کلاس ریپوزیتوری برای اجرای این رابط ایجاد خواهیم کرد. ما آن را class Repository نامگذاری خواهیم نمود.

 

namespace Client.Repository  
۰۲٫{  
۰۳٫    public class Repository<T>:IRepository<T> where T:class  
۰۴٫    {  
۰۵٫        protected readonly DbContext db;  
۰۶٫        public Repository(DbContext _db)  
۰۷٫        {  
۰۸٫            db = _db;  
۰۹٫        }  
۱۰٫        public IEnumerable<T> SelectAll()  
۱۱٫        {  
۱۲٫            return db.Set().ToList();  
۱۳٫        }  
۱۴٫        public T SelectById(int id)  
۱۵٫        {  
۱۶٫            return db.Set().Find(id);  
۱۷٫        }  
۱۸٫        public void Insert(T obj)  
۱۹٫        {  
۲۰٫            db.Set().Add(obj);  
۲۱٫        }  
۲۲٫        public void Update(T obj)  
۲۳٫        {  
۲۴٫            db.Entry(obj).State = EntityState.Modified;  
۲۵٫        }  
۲۶٫        public void Delete(int id)  
۲۷٫        {  
۲۸٫             T obj = db.Set().Find(Id);  
۲۹٫             this.Remove(obj);  
۳۰٫        }  
۳۱٫        public void Save()  
۳۲٫        {  
۳۳٫            db.SaveChanges();  
۳۴٫        }  
۳۵٫    }  
۳۶٫}  

برای دسترسی به داده ها ، ما از Entity framework code first approach استفاده می کنیم ، بنابراین یک کلاس DbContext ایجاد خواهیم کرد. کلاس ClientContext می تواند به صورت فهرست زیر نمایش داده شود:

 

namespace Client.Web.Models  
۰۲٫{  
۰۳٫    using System;  
۰۴٫    using System.Data.Entity;  
۰۵٫    using System.Linq;  
۰۶٫  
۰۷٫    public class ClientContext : DbContext  
۰۸٫    {  
۰۹٫          
۱۰٫        public ClientContext()  
۱۱٫            : base("name=ClientContext")  
۱۲٫        {  
۱۳٫        }  
۱۴٫          
۱۵٫        public virtual DbSet<Client> Client  { get; set; }  
۱۶٫    }  
۱۷٫}  

ارجاع به الگوی Repository در MVC

اکنون باید پروژه ریپوزیتوری class library را به پروژه MVC Web ارجاع دهیم. برای این کار، بر روی پروژه Client.Web راست کلیک کرده و پروژه reference Client.Repository را اضافه کنید. اکنون یک کنترلر را به پروژه Client.Web را (scaffold) خواهیم زد.

برای scaffold زدن، روی پوشه کنترلر راست کلیک کرده و کنترلر جدید را با استفاده از چارچوب نهاد (entity) انتخاب کرده و نام آن را Client Controller بگذارید. برای استفاده از کلاس IRepository برای عملیات پایگاه داده، موضوع و مقصود از کلاس ریپوزیتوری را ایجاد خواهیم نمود و روش کلاس ریپوزیتوری را نامگذاری خواهیم کرد. اکنون برنامه را بسازید و اجرا کنید . ما باید قادر باشیم عملیات CRUD را اجرا کنیم.

repository در mvc

مدیریت حالت در ASP.NET – آموزش گام به گام طراحی سایت با ASP NET

ASP.NET State Managemet

آموزش گام به گام طراحی سایت با ASP NET : هر بار که یک صفحه وب به سمت سرور ارسال می شود یک نمونه از کلاس آن صفحه ساخته می شود. در برنامه نویسی وب سنتی این کار به این معنی بود که تمام اطلاعات مربوط به آن صفحه و کنترل های بر روی آن در یک رفت و برگشت به سرور (round trip) از بین خواهد رفت. به عنوان مثال اگر کاربر اطلاعاتی را در یک textbox وارد کند، آن اطلاعات در یک رفت و برگشت از طرف مرورگر یا مشتری (client) به سمت سرور از دست خواهد رفت. در متن زیر به بررسی مدیریت حالت در ASP.NET برای رفع این مشکل خواهیم پرداخت.

آموزش گام به گام طراحی سایت با asp net

برای جلوگیری از این محدودیت که در برنامه نویسی وب سنتی وجود داشت، ASP.NET راه کارهای مختلفی را ارائه می دهد که باعث محافظت از داده می شود. این ویژگی ها عبارتند از:

  • View State
  • Control State
  • Hidden Fields
  • Cookies
  • Query Strings
  • Application State
  • Session State
  • Profile properties

در view state، control state، hidden fields،cookies و query strings  داده در سمت client به شیوه های مختلف ذخیره می شود، در حالیکه در application state، session state و profile properties داده در حافظه های موجود در سرور ذخیره می شود. هر کدام از دو روش نقاط قوت و ضعف خاص خود را دارند.

آموزش گام به گام طراحی سایت با ASP NET :

روش های مدیریتی مبتنی بر مشتری:(Client-based)

بخش های بعد در مورد راهکارهای مدیریت حالت که در آن اطلاعات داخل page در کامپیوتر client ذخیره می شود توضیح می دهد. هیچ اطلاعاتی در بین round trip ها در سرور ذخیره نمی شود.

view state

view state یک دیکشنری از اشیا برای نگه داری از داده های مهم هر page فراهم می کند. این روش، روش پیش فرض است که هر page برای نگه داری اطلاعات و ویژگی های کنترلی خود مابین رفت و برگشت ها استفاده می کند.

وقتی یک page پردازش می شود حالت فعلی page و کنترل های آن با یک رشته hash می شود و اگر میزان اندازه داده در view state بیش تر از مقدار معین شده که در ویژگی  MaxPageStateFieldLength قرار دارد باشد، به صورت یک فیلد پنهان در داخل page ذخیره می شود. وقتی که page دوباره به سمت سرور ارسال می شود رشته view state را هنگام بارگذاری، تجزیه (parse) می کند و اطلاعات در داخل آن باقی می ماند.

Control state  

گاهی اوقات نیاز دارید برای درست کار کردن کنترل ها، داده های مربوط به حالت کنترل (control state) را ذخیره کنید. به عنوان مثال اگر کنترلی بنویسید که شامل tabهای مختلفی باشد و هر  tab اطلاعات مختلفی را نشان می دهد، برای اینکه کنترل ها به درستی کار کنند هر کنترل باید بداند که کدام tab در هر round trip انتخاب می شود. view state  می تواند برای این منظور انتخاب شود اما می تواند توسط توسعه دهندگان در سطح page غیرفعال شود و منجر به عدم کنترل گردد. برای حل این مشکل فریم ورک ASP.NET ویژگی به نام control state را معرفی کرد که موجب می شود اطلاعاتی که منحصرا مربوط به کنترل هستند نگه داری شوند و نتوان مانند view state آن را غیرفعال کرد.

Hidden Fields

ASP.NET به شما اجازه می دهد تا اطلاعات را در داخل Hidden Fields یا فیلدهای پنهان ذخیره کنید. یک فیلد پنهان به طور آشکار در صفحه مرورگر render نمی شود اما می توانید ویژگی های آن را به صورت دلخواه مانند کنترل استاندارد تنظیم کنید. وقتیکه یک page در سرور ثبت می شود محتوای فیلد پنهان آن در یک فرم HTTP همراه با سایر کنترل ها ارسال می شود. فیلد پنهان مانند یک مخزن (repository) برای هر اطلاعاتی که ذخیره می کنید عمل می کند.

یادداشت امنیتی در آموزش گام به گام طراحی سایت با ASP NET :

 

برای هر کاربر دشمن دیدن و تغییر دادن محتوای فیلدهای پنهان ساده و راحت است. اطلاعاتی که حساسیت بالایی دارند یا درست کار کردن سیستم وابسته به آنها است را در داخل فیلدهای پنهان قرار ندهید.

کنترل Hidden Fields یک متغیر را در ویژگی به نام value ذخیره می کند و باید به طور صریح به page اضافه شود. برای اینکه مقادیر فیلد پنهان هنگام پردازش page قابل دسترس باشند باید با فرمان HTTP POST  آن page را ثبت کنید. اگر از فیلدهای پنهان استفاده می کنید و page با فرمان HTTP GET ثبت شده است، فیلدهای پنهان در دسترس نخواهند بود

آموزش گام به گام طراحی سایت با ASP NET :

Cookies

Cookie حجم کمی از داده است که به صورت که به صورت یک فایل متنی در سیستم فایل client یا در مرورگر client ذخیره می شود. Cookie شامل اطلاعات مختص به سایت است که سرور آنها را همراه خروجی های page به سمت client ارسال می کند.cookie  ها می توانند موقت(با تاریخ و زمان انقضای معین) یا دائمی باشند.

شما می توانید از cookie برای ذخیره اطلاعات درباره ی یک client ، session یا application استفاده کنید. cookie ها در دستگاه client ذخیره می شوند و زمانی که مرور گر یک page را درخواست می دهد client اطلاعات داخل cookie را همراه اطلاعات در خواستی می فرستد. سرور می تواند cookie را بخواند و مقادیر آن را استخراج کند.
یک استفاده رایج می تواند ذخیره یک token باشد که نشان می دهد کاربر قبلا در برنامه احراز هویت شده است.

یادداشت امنیتی
مرورگر فقط می تواند داده ای را به سرور ارسال کند که سازنده cookie است. کاربران دشمن می توانند راه هایی برای دسترسی به cookie ها و خواندن محتوای آنها پیدا کنند.توصیه می شود که اطلاعات مهم مثل نام کاربری یا پسورد را در cookies ذخیره نکنید. جای آن token را در cookie ذخیره کنید که کاربر را شناسایی می کند و از token برای پیدا کردن اطلاعات مهم درسرور استفاده می کند.

Query Strings
رشته Query اطلاعاتی است که به انتهای page URL اضافه می شود.یک رشته query می توانند مانند مثال زیر باشد
http://www.contoso.com/listwidgets.aspx?category=basic & price=100
در مسیر URL بالا رشته query با علامت سوال شروع می شود و شامل ۲ جفت به صورت attribute/value است.که یکی از انها “category” و دیگری “price” نام دارد. رشته query یک راه ساده اما محدود را برای ذخیره اطلاعات فراهم می کند. به عنوان مثال راه ساده ای برای ارسال اطلاعات از یک page به page دیگر وجود دارد مانند ارسال یک شماره محصول (product number) از یک page به page دیگری که از آنجا پردازش خواهد شد.با این حال بعضی از مرورگر ها و سیستم های client یک محدوده ۲۰۸۳ کاراکتری برای طول URL در نظر می گیرند.

یادداشت امنیتی
اطلاعاتی که در رشته query ارسال می شوند می توانند توسط کاربران دشمن تحریف و دچار تغییر شوند. به رشته های query برای ارسال اطلاعات مهم و حساس اطمینان نکنید.همچنین کاربر می تواند یک URL را bookmark کند یا URL را برای کاربران دیگر ارسال کند.
برای اینکه مقدار رشته query در هنگام پردازش page در دسترس باشد page را باید با فرمان HTTP GET ثبت (submit) کنید. به همین علت زمانی که از فرمان HTTP POST برای پردازش page استفاده می کنید نمی توانید از فواید رشته query بهره ببرید.

روش های مدیریتی مبتنی بر سرور(server-based)
ASP.NET روش های متنوعی را برای نگه داری و ذخیره اطلاعات بر روی سرور به جای ذخیره آن ها بر روی سیستم client ارائه می دهد.با استفاده از روش های مدیریتی مبتنی بر سرور می توانید حجم اطلاعات ارسال شده به client را کاهش دهید اگرچه این کار نیازمند استفاده از منابع پر هزینه بر روی سرور است. بخش های بعدی ۳ روش مدیریتی مبتنی بر سرور را شرح می دهند:Application state و session state و profile properties.

Application State
ASP.NET به شما اجازه می دهد که مقادیر را با استفاده از application state که یک نمونه از کلاس HTTP Application State است برای هر برنامه وب فعال ذخیره کنید.application state یک مکانیزم عمومی ذخیره سازی است که توسط تمام pageها در برنامه وب قابل دسترسی است.بنابراین application state برای ذخیره سازی اطلاعاتی که بین رفت و برگشت های (round trip) سرور و مابین در خواست ها برای هر page باید نگه داری و ذخیره شوند مفید خواهد بود.
Application state در یک دیکشنری مقدار/کلید (key/value)_که زمان هر درخواست به URL ساخته می شود_ذخیره می گردد.شما می توانید اطلاعات مربوط به application خود را برای ذخیره شدن مابین هر درخواست به page به این ساختار اضافه کنید.
زمانی که شما اطلاعات مربوط به application خود را به application state اضافه می کنید سرور آنها را مدیریت می کند.

Session State
ASP.NET به شما اجازه می دهد که مقادیر را با استفاده از Session state که یک نمونه از کلاس Http Session state است برای هر برنامه فعال وب ذخیره کنید.
Session state مشابه application است به استثنا این که Session state به Session فعلی مرورگر محدود می شود. یعنی محدوده فعالیت آن، Session فعلی مرورگر است. وقتی کاربران مختلف از برنامه شما استفاده می کنند هر Session کاربر یک Session state متفاوت خواهد داشت. همچنین وقتی یک کاربر از برنامه شما خارج می شود و بعد دوباره به آن برمی گردد Session کاربر دومی Session state متفاوتی نسبت به اولی خواهد داشت.
Session state به صورت یک دیکشنری مقدار/کلید(key/value) برای ذخیره اطلاعات مربوط به Session_که باید مابین رفت و برگشت ها به سرور و مابین درخواست به page نگه داری شوند_ساخته می شود.
می توانید از Session state برای انجام کار های زیر استفاده کرد:
• برای شناسایی درخواست های مرورگر یا client به صورت انحصاری و نگاشت ان ها به نمونه های Session تنها و تکی بر روی سرور

• ذخیره داده مربوط به Session بر روی سرور برای استفاده از آن هنگام درخواست های چند گانه مرورگر یا client در session یکسان
• جهت افزایش رویداد های مدیریت session
وقتی اطلاعات مربوط به application را به session state اضافه می کنید سرور این شی را مدیریت می کند.بسته به اینکه کدام گزینه را در نظر می گیرید اطلاعات session بر روی cookie ها، بر روی server یا بر روی کامپیوتری که Microsoft SQL Server را اجرا می کند ذخیره شوند.

Profile properties
ASP.NET ویژگی به نام profile properties را فراهم می کند که اجازه ذخیره سازی داده های مربوط به کاربر را می دهد.این ویژگی مشابه session state است به جز اینکه داده ی profile زمانی که session کاربر به اتمام می رسد از بین نمی رود. ویژگی profile properties از یک پروفایل ASP.NET استفاده می کند و به صورت پایدار ذخیره می شود.پروفایل ASP.NET به شما اجازه می دهد تا به راحتی اطلاعات خود را مدیریت کنید بدون اینکه برای خود یک پایگاه داده (data base) بسازید و آن را ذخیره کنید.همچنین پروفایل با استفاده از یک API قوی که می توان از هر جای برنامه به آن دسترسی پیدا کرد اطلاعات کاربر را در دسترس قرار می دهد.
شما می توانید اشیا از هر نوع را در پروفایل ذخیره کنید.ویژگی پروفایل ASP.NET یک سیستم ذخیره سازی عمومی و کلی را فراهم می کند که به شما اجازه می دهد هر نوع داده را تعریف و ذخیره کنید.
برای استفاده از profile properties باید یک سرویس دهنده profile را پیکربندی کنید.ASP.NET شامل کلاس Sql profile provider است که به شما اجازه می دهد داده پروفایل را در یک پایگاه داده SQL ذخیره کنید.همچنین می توانید کلاس سرویس دهنده پروفایل خود را نیز بسازید که داده پروفایل را در یک فرمت دلخواه تغییر داده شده (custom) و در یک مکانیزم ذخیره سازی دلخواه مثل فایل XML یا یک وب سرویس(web service) ذخیره می کند.
چون داده ای که در profile properties قرار دارد در داخل حافظه برنامه (application memory) ذخیره شده است از طریق ریستارت کردن ( Internet Information Service (IIS حفظ و نگه داری می شود. ( آموزش گام به گام طراحی سایت با asp net )

نحوه ارسال ایمیل در ASP NET Core 1.0

ASP.NET Core 1.0 یک راه انداز برای فریم ورک ASP.NET است که قابلیت پشتیبانی از فریم ورک قدیمی NET. و فریم ورک جدیدتر NET. Core را دارد. ASP.Net Core و NET. Core هر دو برای کار با انواع platformها طراحی شده اند و نسبت به فریم ورک کامل NET. حجم کمتری دارد و سریع تر است. بسیاری از APIهای NET. خیلی شبیه به یک فریم ورک کامل NET. هستند و توسعه دهندگان آنها تلاش زیادی می کنند تا این APIها کارایی در حد یک فریم ورک کامل داشته باشند. اگرچه از عواقب توسعه یک فریم ورک کوچک نسبت به فریم ورک کامل این است که ممکن است بعضی از کتابخانه ها را از دست بدهیم. در این آموزش به نحوه ارسال ایمیل در ASP NET خواهیم پرداخت.

در یکی از پروژه هایی که محققان روی آن کار می کردند نیاز به ارسال ایمیل از طریق یک برنامه وب (web application) بود. در یک فریم ورک قدیمی می توان از کلاس SmtpClient از فضای نام system.net.mail استفاده کرد. اما در فریم ورک Net. Core این قابلیت هنوز فراهم نیست.

برای رفع این مشکل ابتدا به گوگل سر زدیم که ببینیم چه کس دیگری به این مشکل برخورد کرده است و چگونه این مشکل را رفع کرده است. اما هیچ راه حل مناسبی برای این موضوع پیدا نشده بود. بالاخره توسط سایت GitHub با کتابخانه  MailKit آشنا شدیم. این کتابخانه توسط فردی به نام Jeffery Stedfast توسعه یافته است و از آنجا که به تازگی برای کار با Net. Core آپدیت شده است، بهترین راه حل برای ما بود.

در این مطلب به شما آموزش می دهیم که چگونه این کار را با استفاده از دو سناریو انجام می هیم. ابتدا ارسال مستقیم ایمیل از طریق یک رلهSMTP (relay و دوم به واسطه امکان ذخیره ایمیل در یک پوشه SMTP. هر دو روش روش ساده و کارآمدی به حساب می آیند.

اضافه کردن MailKit به پروژه ارسال ایمیل در ASP NET

قدم اول اضافه کردن ارجاعات (reference) به پکیج NuGet است. حال بهتر است از فایل project.jason  برای راه اندازی نیازمندی ها استفاده کنیم. ابتدا باید کتابخانه MailKit را -که فعلا نسخه beta6-1.3.0 آن موجود است- به بخش نیازمندی ها (dependency)  در فایل project.jason  اضافه کنید.

در برنامه وب ASP.NET Core،  نیازمندی ها باید مثل شکل زیر باشند. ( ارسال ایمیل در asp net )


ارسال ایمیل در asp net

زمانیکه تغییرات را اعمال می کنید Virtual Storage باید یک restore از پکیج های ضروری NuGet را نگه داری کند.

ارسال ایمیل در ASP NET با سرور SMTP

در این قسمت ما حداقل کد لازم برای اینکه یک ایمیل را به وسیله سرور SMTP ارسال کنید نشان می دهیم. برای این کار فایل MessageServices.cs را در برنامه وب خود باز کنید. باید در ابتدای فایل از سه عبارت using استفاده کنیم.

;using MailKit.Net.Smtp

;using MimeKit

;using MailKit.Security

متد SendEmailAsynch می تواند مانند قطعه کد زیر باشد.

public async Task SendEmailAsync(string email, string subject, string message)
{
    var emailMessage = new MimeMessage();
 
    emailMessage.From.Add(new MailboxAddress("Joe Bloggs", "jbloggs@example.com"));
    emailMessage.To.Add(new MailboxAddress("", email));
    emailMessage.Subject = subject;
    emailMessage.Body = new TextPart("plain") { Text = message };
 
    using (var client = new SmtpClient())
    {
        client.LocalDomain = "some.domain.com";                
        await client.ConnectAsync("smtp.relay.uri", 25, SecureSocketOptions.None).ConfigureAwait(false);
        await client.SendAsync(emailMessage).ConfigureAwait(false);
        await client.DisconnectAsync(true).ConfigureAwait(false);
    }

ابتدا یک شی از کلاس MimeMessage می سازیم که در آن ایمیلی را که می خواهیم بفرستیم نمایش می دهد. سپس می توانیم بعضی از propertyهای آن را set کنیم.

کلاس MimeMessage یک لیست از آدرس ها در متد From و لیست دیگری از آدرس ها در متد To دارد که می توان آنها را با فرستنده ها و گیرنده های ایمیل متناظر کرد. برای این مثال ما برای هر کدام از این متدها یک کلاس MailboxAddress فراخوانی کرده ایم. تابع سازنده MailboxAddress نام و آدرس ایمیل برای ارسال mailbox را به عنوان پارامتر می گیرد. در این مثال متد To آدرس ایمیلی را (به عنوان آرگومان) می گیرد که توسط caller به تابع SendEmailAsync فرستاده شده است.

سپس به ایمیل مورد نظر موضوع ایمیل(subject) را اضافه می کنیم و بعد از آن بدنه ایمیل را می سازیم. راه های گوناگونی برای ساختن و تعریف کردن بدنه ایمیل وجود دارد اما ما در این قسمت از یک راهکار ساده برای ساخت قسمت بدنه ایمیل با استفاده از ارسال متن به متد SendEmailAsync بهره برده ایم.

آخرین مرحله فرستادن ایمیل است و برای این کار از کلاس SmtpClient استفاده می کنیم. توجه داشته باشید که این کلاس مربوط به پکیج system.net.mail نیست بلکه بخشی از کتابخانه MailKit است.

یک نمونه از SmtpClient ساختیم که توسط عبارت using قابل دسترس شده است. زمانیکه ایمیل را فرستادیم دیگر قصد نداریم ارتباطمان با سرور SMTP را باز نگه داریم.  می توانید در صورت نیاز یک Local Domain را به منظور ارتباط با سرور SMTP تنظیم (set) کنید. این کار موجب نمایش مبدا پیام می شود.

سپس به صورت آسنکرون یا ناهمگام به سرور SMTP متصل می شویم. متد ConnectAsync می تواند uri مربوط به سرور SMTP را (به عنوان آرگومان) بگیرد یا اینکه مثل کاری که ما اینجا انجام دادیم با یک پورت و یک SSL سربارگذاری (over load ) شود. در این مثال هنگامی که سرور SMTP را تست می کنیم SSL ضروری نیست بنابراین آن را به صورت صریح (explicit) مشخص می کنیم.

در نهایت پیام را به صورت آسنکرون می فرستیم و سپس ارتباط را قطع می کنیم. در این مرحله ایمیل باید از طریق سرور SMTP ارسال شده و به مقصد رسیده باشد.

ارسال ایمیل در ASP NET توسط پوشه SMTP (SMTP pickup folder(

  همانطور که گفته شد ممکن است به جای ارسال مستقیم ایمیل از یک سرور SMTP ،آن را در یک پوشه SMTP که بر روی یک وب سرور اجرا می شود ذخیره کرد. ممکن است راه بهتری هم وجود داشته باشد اما ما این کار را به صورت زیر انجام دادیم.

public async Task SendEmailAsync(string email, string subject, string message)
{
    var emailMessage = new MimeMessage();
 
    emailMessage.From.Add(new MailboxAddress("Joe Bloggs", "jbloggs@example.com"));
    emailMessage.To.Add(new MailboxAddress("", email));
    emailMessage.Subject = subject;
    emailMessage.Body = new TextPart("plain") { Text = message };
 
    using (StreamWriter data = System.IO.File.CreateText("c:\\smtppickup\\email.txt"))
    {
        emailMessage.WriteTo(data.BaseStream);
    }
}

تنها تفاوت این کد با کد قبلی این است که در این کد از SmtpClient استفاده نمی شود. به جای آن پس از ساخت شی به نام emailMessage یک شی از کلاس steamwriter تعریف می کنیم که یک فایل متنی (text) در یک دایرکتوری محلی تولید می کند. سپس از متد MimeMessage.WriteTo برای تولید یک فایل ایمیل RFC822 در دایرکتوری pickup استفاده می کنیم.

نتیجه

MailKit یک کتابخانه خوب است که بسیاری از نیازهای ما را در این مطلب پاسخ می دهد. شواهدی وجود دارد که نشان می دهد تیم Microsoft در حال کار کردن بر روی Smtpclient است برای اینکه بتواند ASP.NET Core را پشتیبانی کند.

ارسال ایمیل در mvc

کتاب آموزش توسعه برنامه های تحت وب با ASP.NET MVC مرجع آزمون ۴۸۶-۷۰ مایکروسافت

pdf شسح ئرز

آزمون ۴۸۶-۷۰ مایکروسافت برای بررسی دانش شما در زمینه طراحی ، توسعه و عیب یابی برنامه های تحت وب ASP.NET MVC با ویژوال استدیو می باشد. این کتاب آموزش MVC بر همین مبنا آموزش ها را ارائه کرده است و در پایان آمادگی های زیر را برای این آزمون بدست خواهید آورد:

  • طراحی ساختار پروژه
  • طراحی رابط کاربری
  • توسعه رابط کاربری
  • عیب یابی برنامه های تحت وب
  • طراحی و اجرای سیاست های امنیتی

کتاب آموزش mvc

سرفصل های کتاب آموزش MVC

  • طراحی ساختار نرم افزار
    • طرح لایه بندی پروژه
    • طراحی نحوه توزیع نرم افزار
    • پیکربندی مدیریت وضعیت
    • طراحی استراتژی کش
    • طراحی و اجرای استراتژی سوکت ها
  • طراحی رابط کاربری
    • نحوه اعمال رابط کاربری به پروژه
    • طراحی رابط کاربری براساس رفتار ها
    • برنامه ریزی برای ساخت رابط کاربری انعطاف پذیر
  • برنامه نویسی تجربه کاربری
    • برنامه ریزی برای بهینه سازی برای موتور های جستجو
    • برنامه ریزی و اجرای بومی سازی پروژه
    • طراحی و اجرای کنترلر ها و اکشن ها
    • طراحی و اجرای روت ها
    • کنترل رفتار پروژه با استفاده از توسعه پذیری MVC
    • کاهش استفاده از شبکه
  • عیب یابی و رفع عیب پروژه
    • جلوگیری کردن و خطایابی خطاهای زمان اجرا
    • طراحی استراتژی مدیریت استثناءها
    • تست پروژه نرم افزاری
  • طراحی و اجرای امنیت در پروژه
    • پیکربندی احراز هویت
    • پیکربندی و تعیین سطح دسترسی کاربران

توضیحات کتاب آموزش MVC

نویسنده : william Penberthy

موضوع :    Developing ASP.NET MVC 4

تعداد صفحات : ۳۸۶

فرمت : کتاب PDF

ناشر کتاب آموزش MVC : مایکروسافت

زبان : انگلیسی

دانلود کتاب

آموزش ASP.NET MVC پیاده سازی عملیات CRUD بدون یک خط کد نویسی

asp mvc url

در این آموزش ASP.NET MVC به نحوه پیاده سازی عملیات CRUD   بدون یک خط کد نویسی برای انجام عملیات های اصلی کار با دیتابیس پرداخته می شود . برای انجام اینکار ما از ویژگی های قدرتمند موجود در ASP.NET MVC استفاده خواهیم کرد

پیش نیاز آموزش ASP.NET MVC

قبل از شروع این مقاله نیاز هست با پایگاه داده و الگوی MVC آشنا باشید . در اینجا ما از روش database first استفاده خواهیم کرد در صورتیکه با پایگاه داده و الگوی MVC  و روش database first آشنا نیستید ابتدا به مطالعه آنها بپردازید.

مراحل انجام کار

مرحله ۱ :  ابتدا یک دیتابیس و سپس یک جدول با نام tblData ایجاد کنید . در این جدول فیلد Id  کلید اصلی و auto increment ست شده است.

آموزش ASP.NET MVC

مرحله ۲ : ویژوال استدیو را باز کرده به مسیر File سپس New Project وبعد  ASP.NET MVC4 Application را انتخاب کنید. یک نام برای پروژه بگذارید مثلا  CrudOperationsWithoutCode و برروی OK کلیک کنید.

آموزش asp.net پروژه محور

مرحله ۳ : در پنجره بعد گزینه Internet Application را انتخاب کرده و برروی OK کلیک کنید.

asp mvc آموزش

آموزش ASP.NET MVC

مرحله ۴ : برروی solution راست کلیک کرده و به Add سپس New Item بروید.

آموزش پروژه محور asp.net core

مرحله ۵ :  گزینه ADO .NET Entity Data Model را انتخاب کرده .  نام آنرا CrudEntities گذاشته و برروی Add کلیک کنید تا پنجره بعد ظاهر شود .

آموزش asp.net با c#

مرحله ۶ : EF Designer from Database را انتخاب کرده و برروی Next کلیک کنید .

آموزش asp.net mvc

مرحله ۷ :  در پنجره بعد برروی New Connection کلیک کرده تا یک پنجره جدید باز شود فیلد های لازم را برای ارتباط با دیتابیس پر کنید . سپس اتصال را تست کرده و برروی OK کلیک کنید.

دوره آموزش طراحی سایت با ASP.NET MVC

asp mvc آموزش

مرحله ۸ :  گزینه Save connection settings in Web.Config as : را انتخاب کرده و بعد از تعیین یک نام برروی Next کلیک کنید.

asp آموزش

مرحله ۹ : در پنجره جدید گزینه Entity Framework 5.0 را انتخاب کرده و برروی next کلیک کنید

asp.net آموزش

مرحله ۱۰ : در مرحله بعد    tblData – dbo- Tables را باز کرده و برروی Finish کلیک کنید .  

aspmvc

مرحله ۱۱٫

با راست کلیک کردن برروی سلوشن آنرا Build کنید (این مرحله الزامی است چون اگر اینکار را انجام ندهید در هنگام اضافه کردن کنترلر کلاس مدل نمایش داده نخواهد شد)

اموزش asp.net

مرحله ۱۲ ( آموزش ASP.NET MVC )

برروی پوشه کنترلر راست کلیک کرده . گزینه Add-Controller را انتخاب کنید تا یک پنجره جدید باز شود.

image012

مرحله ۱۳ . یک نام برای کنترلر انتخاب کنید من نام CrudController  را انتخاب می کنم.

گزینه های قسمت Scaffolding را به ترتیب زیر انتخاب کنید .

Template : MVC controller with read/write actions and views, using Entity Framework
    Model Class :
tblData (CrudOperationsWithoutCode
Data context class :
CRUDDBEntities (CrudOperationsWithoutCode
Views:
Razor (CSHTML)

asp mvc

مرحله ۱۴ .

همه کدهای مورد نیاز برای انجام عملیات CRUD  به طور خودکار در این مرحله ایجاد می شود. حال کدهای شما اماده اجرا می باشد تنها باید کلید F5 را کلیک کنید یا مطابق شکل زیر آیکون اجرا را کلیک کنید.

 آموزش asp mvc

خروجی ۱ .

بعد از اجرا view ی Index از HomeController نمایش داده خواهد شد و ما باید view ی Index از CrudController را فراخوانی کنیم. برای انجام این تغییر در url مسیر  localhost:**** */Crud/Index را وارد کنید.

asp mvc url

همانگونه که می بینید همه  رکورد های دیتابیس به نمایش گذاشته شد. همچنین عملیان خواندن به درستی اجرا شد. و در اینجا سه گزینه  Create New , Edit, Details و Delete وجود دارد.

خروجی ۲٫

برای اجرای عملیات ایجاد رکورد جدید ( Create)  برروی Create New کلیک کنید. اینکار شما را به مسیر localhost:**** */Crud/Create هدایت می کند. در این فرم شما می توانید عملیات ایجاد داده جدید در دیتابیس را با استفاده از برنامه MVC اجرا کنید.

ََُASP CRUD

فرم را پر کرده و برروی Create کلیک کنید. این عمل باعث می شود داده ها در پایگاه داده ذخیره شود.

خروجی ۳٫

به طور مشابه شما می توانید با کلیک برروی گزینه های Edit  و Delete در View ی Index در CrudController کنترلر عملیات های ویرایش و حذف را انجام دهید.

آموزش crud

crud در asp

همانطور که دیدید در مراحل بالا بدون یک خط کد نویسی و با استفاده از ویژگی های قدرتمند Scaffolding که توسط مایکروسافت ارائه شده است تونستیم همه عملیات های مربوط به ایجاد ، حذف ، خواندن ، و ویرایش در پایگاه داده را در یک برنامه تحت وب .NET  پیاده سازی کنیم.

 

 

 

آموزش Dropdownlist در MVC -ساخت Dropdownlist آبشاری

Select country

در این پست به آموزش Dropdownlist در MVC  به صورت آبشاری خواهیم پرداخت  :

در این مثال از entity framework به روش   code first برای خواندن کشور ها و ایالت ها ( states) از دیتابیس استفاده می شود.

  • ویژوال استدیو را باز کنید
  • یک پروژه از نوع ASP.NET MVC 4 ایجاد کرده و نام آن را CascadingDropDown قرار دهید.
  • View engine آنرا Razer انتخاب کنید
  • یک کنترلر با نام HomeController به پوشه کنترلر اضافه کنید
  • کلاس های مدل را مطابق کدهای زیر به پوشه مدل اضافه کنید:

Country:

public class Country  
{  
   public int CountryID { get; set; }  
   public string Name { get; set; }  
  
   public virtual ICollection<State> States { get; set; }  
}

State:

public class State  
{  
   public int StateID { get; set; }  
   public string Name { get; set; }  
  
   public int CountryID { get; set; }  
   public virtual Country Country { get; set; }  
}

ModelDbContext:

public class ModelDbContext : DbContext  
{  
   public DbSet<Country> Countries { get; set; }  
   public DbSet<State> States { get; set; }  
}

Model

در این کلاس مدل یک پراپرتی با نام CountryID که نگهدارنده کشور انتخابی و یک پراپرتی با نام State برای نگهداری مقدار ایالت و پراپرتی های Countries و States برای نگهداری لیست کشور های موجود و ایالت های هر کدام تعریف شده است.

public class Model  
{  
    public int ? CountryID  
    {  
        get;  
        set;  
    }  
    public int ? StateID  
    {  
        get;  
        set;  
    }  
    public IEnumerable < Country > Countries  
    {  
        get;  
        set;  
    }  
    public IEnumerable < State > States  
    {  
        get;  
        set;  
    }  
}

آموزش Dropdownlist در MVC

همچنین به وسیله کدهای زیر مقداری داده نمونه وقتی دیتابیس ایجاد می شود در  آن وارد می کنیم

public class ModelInitializer: DropCreateDatabaseIfModelChanges < ModelDbContext >  
{  
    protected override void Seed(ModelDbContext context)  
    {  
        var countries = new List < Country >  
        {  
            new Country  
            {  
                Name = "India"  
            },  
            new Country  
            {  
                Name = "USA"  
            },  
            new Country  
            {  
                Name = "South Africa"  
            },  
            new Country  
            {  
                Name = "Australlia"  
            },  
        };  
        var states = new List < State >  
        {  
            new State  
            {  
                Name = "Delhi", Country = countries.Single(m => m.Name == "India")  
            },  
            new State  
            {  
                Name = "Mumbai", Country = countries.Single(m => m.Name == "India")  
            },  
            new State  
            {  
                Name = "California", Country = countries.Single(m => m.Name == "USA")  
            },  
            new State  
            {  
                Name = "Newyork", Country = countries.Single(m => m.Name == "USA")  
            },  
            new State  
            {  
                Name = "Capetown", Country = countries.Single(m => m.Name == "South Africa")  
            },  
            new State  
            {  
                Name = "Bolavia", Country = countries.Single(m => m.Name == "South Africa")  
            },  
            new State  
            {  
                Name = "Sydney", Country = countries.Single(m => m.Name == "Australlia")  
            },  
            new State  
            {  
                Name = "Melbourne", Country = countries.Single(m => m.Name == "Australlia")  
            },  
        };  
        countries.ForEach(m => context.Countries.Add(m));  
        states.ForEach(m => context.States.Add(m));  
    }  
}

همچنین connection string در فایل  web.config را برای ارتباط با دیتابیس اضافه کنید

<connectionStrings>  
   <add name="ModelDbContext" connectionString="Data Source=.\SQLEXPRESS; Initial Catalog=CountryDb; Integrated Security=true;" providerName="System.Data.SqlClient"/>  
</connectionStrings>

فایل Global.asax مطابق کدهای زیر ویرایش کنید:

protected void Application_Start()  
{  
    Database.SetInitializer(new CascadingDropDown.Models.ModelInitializer());  
    AreaRegistration.RegisterAllAreas();  
    WebApiConfig.Register(GlobalConfiguration.Configuration);  
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);  
    RouteConfig.RegisterRoutes(RouteTable.Routes);  
}

یک کنترلر با نام HomeController ایجاد کرده و اکشن زیر را به آن اضافه کنید. در این کنترلر اکشن index  یک شئی از نوع Model  به همراه ویو index که نگهدارنده لیست کشور ها از دیتابیس هست را بر می گرداند.اکشن SelectCountry لیست استان ها بر اساس id  کشور برگشت می دهد.

ModelDbContext db = new ModelDbContext();  
public ActionResult Index()  
{  
    Model model = new Model  
    {  
        Countries = db.Countries.ToList()  
    };  
    return View(model);  
}  
[HttpPost]  
public virtual ActionResult SelectCountry(int ? countryid)  
{  
    var states = countryid.HasValue ? db.Countries.FirstOrDefault(m => m.CountryID == countryid).States : null;  
    Model model = new Model  
    {  
        CountryID = countryid,  
            Countries = db.Countries.ToList(),  
            States = states  
    };  
    if (Request.IsAjaxRequest()) return PartialView("_States", model);  
    else return View("Index", model);  
}

یک view با نام Index اضافه کرده و کدهای زیر را در آن وارد کنید:

@model CascadingDropDown.Models.Model  
@{  
    Layout = null;  
}  
  
<!DOCTYPE html>  
<html>  
    <head>  
        <meta name="viewport" content="width=device-width" />  
        <title>Index</title>  
        <script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script>  
        <script type="text/javascript">  
            $(document).ready(function () {  
  
                $('input[type=submit]').hide();  
  
                $('#CountryID').change(function () {  
                    $(this).parents('form').submit();  
                    return false;  
                });  
  
                $("form[action$='SelectCountry']").submit(function () {  
  
                    $.ajax({  
                        url: $(this).attr('action'),  
                        type: 'post',  
                        data: $(this).serialize(),  
                        success: function (response) {  
                            $('#states').html(response);  
                        }  
                    });  
                    return false;  
                });  
            });  
        </script>  
    </head>  
    <body>  
        <div>  
            @using (Html.BeginForm("SelectCountry", "Home"))  
            {  
  
                <fieldset>  
                    <legend>Countries</legend>  
                    @Html.DropDownListFor(m => m.CountryID, new SelectList(Model.Countries,"CountryID", "Name"), "[Please select a Country]")  
  
                    <input type="submit" value="Select" />  
                </fieldset>  
            }  
  
        </div>  
        <div id="states">  
            @Html.Partial("_States", Model)  
        </div>  
    </body>  
</html>

یک partial view با نام States_ ایجاد کنید

@model CascadingDropDown.Models.Model  
<fieldset>  
   @if (Model.States != null && Model.States.Count() > 0)  
   {  
      <legend>States</legend>  
      @Html.HiddenFor(m => m.CountryID);  
      @Html.DropDownListFor(m => m.StateID, new SelectList(Model.States, "StateID","Name"), "[Please select a state]")  
   }  
   else  
   {  
      <legend>No states available</legend>  
   }  
</fieldset>

حال بعد از اجرای برنامه باید تصویر زیر را داشته باشیم

آموزش dropdownlist در mvc

در صورتیکه جاوا اسکریپت غیر فعال باشد یک دکمه مظابق شکل زیر نمایش داده می شود تا با کلیک برروی آن استان ها نمایش داده شودآموزش asp mvcد

آموزش Dropdownlist در MVC

زمانیکه شما یک کشور را انتخاب می کنید لیست تمام استان ها بر اساس کشور انتخاب شده نمایش داده خواهد شد.

کلاس asp

آموزش ASP.NET MVC 6 پیاده سازی صفحه ارتباط با ما (Contact Us)

این آموزش ASP.NET MVC 6 نحوه پیاده سازی صفحه ارتباط با ما را آموزش می دهد . ابتدا مدلی برای فرم Contact می سازیم و عملیات منطقی را بعدا در کنترلر انجام می دهیم. این کار از طریق ساختار و الگو MVC پیاده سازی شده است و برای اعتبار سنجی (Validation) در سمت مشتری (Client) از jQuery استفاده شده است.

پیش نیاز

این پیاده سازی در NET.4.5.1.  اجرا و تست شده است اما بر روی NET. core 1.0 اجرا نشده است چون فاقد فضای نام System.Net.Mail است. این امکانات در نسخه های بعدی ممکن است اضافه شود.

کد  نمونه آموزش ASP.NET MVC 6

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

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;

namespace ContactUS.ViewModel
{
    public class ContactViewModel
    {
        [Required]
        [StringLength(20,MinimumLength =5)]
        public string Name { get; set; }
        [Required]
        [EmailAddress]
        public string Email { get; set; }
        [Required]
        public string Subject { get; set; }
        [Required]
        public string Message { get; set; }
    }
}

کد کنترلر

کد زیر کد مربوط به کنترلر است که ما در آن از سرویس Gmail برای ارسال ایمیل استفاده کرده ایم. می توانید از سرویس دهنده های دیگر نیز برای این کار استفاده کنید

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNet.Mvc;
using ContactUS.ViewModel;
using System.Net.Mail;

namespace ContactUS.Controllers
{
    public class HomeController : Controller
    {
        [HttpGet]
        public IActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public IActionResult Index(ContactViewModel vm)
        {
            if(ModelState.IsValid)
            {
                try
                {
                    MailMessage msz = new MailMessage();
                    msz.From = new MailAddress(vm.Email);//Email which you are getting 
								//from contact us page 
                    msz.To.Add("emailaddrss@gmail.com");//Where mail will be sent 
                    msz.Subject = vm.Subject;
                    msz.Body = vm.Message;
                    SmtpClient smtp = new SmtpClient();

                    smtp.Host = "smtp.gmail.com";

                    smtp.Port = 587;

                    smtp.Credentials = new System.Net.NetworkCredential
					("youremailid@gmail.com", "password");

                    smtp.EnableSsl = true;

                    smtp.Send(msz);

                    ModelState.Clear();
                    ViewBag.Message = "Thank you for Contacting us ";
                }
                catch(Exception ex )
                {
                    ModelState.Clear();
                    ViewBag.Message = $" Sorry we are facing Problem here {ex.Message}";
                }              
            }
          
            return View();
        }
        public IActionResult Error()
        {
            return View();
        }
    }
}

کد سمت مشتری

برای اعتبار سنجی در سمت مشتری از کدهای jQuery استفاده کردیم و همچنین از Bootstrap نیز برای جلوه بهتر استفاده کرده ایم

@model ContactUS.ViewModel.ContactViewModel
@{
    ViewData["Title"] = "Home Page";
}
<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<div>
    <div class="col-md-6">
        <div>
            @if (ViewBag.Message == null)
            {
                <div>
                    <form method="post">
                        <div class="form-group">
                            <label asp-for="Name">Name</label>
                            <input asp-for="Name" class="form-control" />
                            <span asp-validation-for="Name" 
                            class="text-muted"></span>
                        </div>
                        <div class="form-group">
                            <label asp-for="Email">Email</label>
                            <input asp-for="Email" class="form-control" />
                            <span asp-validation-for="Email" 
                            class="text-muted"></span>
                        </div>
                        <div class="form-group">
                            <label asp-for="Subject">Subject</label>
                            <input asp-for="Subject" class="form-control" />
                            <span asp-validation-for="Subject" 
                            class="text-muted"></span>
                        </div>
                        <div class="form-group">
                            <label asp-for="Message">Message</label>
                            <textarea rows="5" cols="15" 
                            asp-for="Message" class="form-control"></textarea>
                            <span asp-validation-for="Message" 
                            class="text-muted"></span>
                        </div>
                        <div>
                            <button type="submit" 
                            class="btn btn-success">Send </button>
                        </div>

                    </form>
                </div>
            }
        </div>

        <div>
            <div>
                @if (ViewBag.Message != null)
            {
                    <div>@ViewBag.Message</div>


                }
            </div>
        </div>
    </div>

</div>

همچنین کل کد منبع را می توانید در زیر دانلود کنید

دانلود کدها

آموزش asp.net mvc 6

نمایش گوگل مپ در سایت ASP.NET

در این آموزش درباره ی نمایش گوگل مپ در سایت ASP.NET برای پیدا کردن موقعیت های گوناگون توضیح داده می شود

مقدمه

Google Map یک سرویس مبتنی بر وب (Web-based) است که اطلاعات مفید و جزئی را در مورد موقعیت جغرافیایی و مکان های مختلف در سرتاسر جهان فراهم می کند. Google Map ابتدا به صورت یک برنامه desktop به زبان ++c توسط Lars و Jens Eilstrup طراحی شد.در اکتبر ۲۰۰۴ شرکت گوگل شرکت توسعه دهنده Google Map را خرید و آن را به یک برنامه وب تبدیل کرد.

پیش زمینه

امروزه Google Map در بسیاری از applicationها به دلایل مختلف استفاده می شود. در این راهنما ما نحوه پیاده سازی Google Map به برنامه های ASP.NET را توضیح می دهیم.

ابتدا برای افزودن این سرویس یک پروژه جدید در Visual studio ایجاد کنید.یک web form به صورت زیر به آن اضافه کنید.

web form را به صورت زیر طراحی کنید:

نمایش گوگل مپ در سایت

script زیر را به قسمت head اضافه کنید

<head runat="server">
    <title></title>

     <!DOCTYPE link href="https://maps/documentation/javascript/examples/default.css" 
     rel="stylesheet" />
<html>
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false" 
    type="text/javascript"></script>
    <script>
        var mapcode;
        var diag;
        function initialize() {
            mapcode = new google.maps.Geocoder();
            var lnt = new google.maps.LatLng(26.45, 82.85);
            var diagChoice = {
                zoom: 9,
                center: lnt,
                diagId: google.maps.MapTypeId.ROADMAP
            }
            diag = new google.maps.Map(document.getElementById
            ('map_populate'), diagChoice);
        }
        function getmap() {
            var completeaddress = document.getElementById('txt_location').value;
            mapcode.geocode({ 'address': completeaddress }, function (results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    diag.setCenter(results[0].geometry.location);
                    var hint = new google.maps.Marker({
                        diag: diag,
                        position: results[0].geometry.location
                    });
                } else {
                    alert('Location Not Tracked. ' + status);
                }
            });
        }
        google.maps.event.addDomListener(window, 'load', initialize);
    </script>

    </html>
</head

حالا دستورات زیر را در تگ div اضافه کنید تا Google Map به برنامه اضافه شود.

<body>
    <form id="form1" runat="server">
   
        <div>
            <h1>Enter Your Location Details</h1>
        </div>
        <div>
            <asp:TextBox ID="txt_location" TextMode="MultiLine" 
            Width="400px" Height="70px" 
            runat="server"></asp:TextBox>
    </div>
        <div>
            <input type="button" 
            value="Search" onclick="getmap()">
        </div>
    <div id="map_populate" 
    style="width:100%; height:500px; border: 5px solid #5E5454;">
    </div>
    </form>

نمایش گوگل مپ در سایت ASP.NET

حالا از صفحه screenshot می گیریم

نمایش google map در سایت

حالا برنامه را ذخیره و بعد اجرا کنید.

آموزش گوگل مپ میکر

حالا مکان دلخواه خود را تایپ کنید و بر روی Search کلیک کنید. برنامه مکان مورد نظر را پیدا می کند و در div نمایش می دهد.

 

کد html نقشه گوگل در سایت