ورود

View Full Version : حرفه ای: آموزش 0 تا 100 برنامه نویسی MVC



fatima_h66
پنج شنبه 08 آبان 1393, 08:12 صبح
با سلام به دوستان
تو این تاپیک قصد آموزش MVC به شیوه خودمو دارم
امیدوارم همراهیم کنید و دلگرمی بهم بدید. نکات کاربردی جدید تو زمینه این تاپیک داشتید در اختیار بچه ها قرار بدید
با تشکر

fatima_h66
پنج شنبه 08 آبان 1393, 08:17 صبح
معماری MVC در دهه 70 میلادی معرفی شد اما در آن زمان پیاده سازی برنامه های Stand Alone با استفاده از این معماری چندان مورد استقبال برنامه نویسان قرار نگرفت. اما با ظهور اینترنت و برنامه های مبتنی بر وب این معماری شانس دوباره ای یافت. ASP.NET MVC فریم ورک مبتنی بر معماری MVC مایکروسافت میباشد که در این سری مقالات به معرفی و بررسی آن خواهیم پرداخت. از دلایل محبوبیت این معماری نظام بخشیدن به پروژه های طراحی سایت (http://psi-co.net/) میباشد. معمولاً به علت همکاری چندین تکنولوژی مختلف با هم در برنامه های مبتنی بر وب ساختار پروژه های بزرگ پیچیده میشوند و اعمال تغییرات و همچنین رفع خطا های پروژه مشکل و زمانبر میشوند که معماری MVC با جداسازی لایه های مختلف برنامه نویسی تا حد زیادی این مشکل را رفع کرده است. از دیگر مزایای این فریم ورک میتوان به کنترل کامل بر روی HTML نهایی، پشتیبانی از فریم ورکهای گوناگون برای Unit Testing ، کنترل بر روی آدرسهای URL و تعامل راحت تر با فریم ورکهای javascript اشاره کرد.

منبع سایت : http://psi-co.net/MVC چیست؟نام MVC از Model-View-Controller گرفته شده و هدف اصلی آن جدا سازی اجزای تشکیل دهنده برنامه است.بخصوص برنامه هایی که دارای واسط کاربری گرافیکی هستند (GUI-Graphical User Interface) این الگوی طراحی در سایر فریم ورک ها مثل Ruby on Rails و Django و Zend هم بکار برده شده است.Mدر MVC معادل Model است و حاوی اطلاعاتی است که نهایتا در اختیار کاربر قرار خواهد گرفت. مثلا اگر فرض کنیم اطلاعات یک شخص را میخواهیم به کاربر نشان دهیم، کلاس مدل ما شامل property های زیر خواهد بود: نام، آدرس، ایمیل و تلفنV در MVC معادل View است. و حاوی نتیجه ای است که کاربر نهایتا در بروزر خواهد دید. view در واقع userinterface برنامه ماست.C در MVC معادل Controller است. کنترلر رابط بین model وview است. کنترلر 3 مسئولیت اصلی دارد:

پردازش درخواست های ورودی
انجام عملیات بر روی مدل(Domain Model)
انتخاب view ای که باید در پاسخ به درخواست رندر شود

هر کنترلر شامل چندین متد public است که هر متد یک action ارائه میدهد که قرار است کنترلر بر روی مدل اجرا کند. هر action method در کنترلر با یک URL مرتبط است. وقتی کنترلر درخواستی برای آن URL خاص دریافت میکند، Action متناسب با آن را اجرا کرده و view انتخابی را رندر کرده و به بروزر برمیگرداند.شکل زیر رابطه بین اجزای MVC را بخوبی نشان میدهد:http://psi-co.net/images/165حال با ایجاد یک پروژه آشنای Hello World با ساختار Controller و view آشنا میشویم:برای ایجاد پروژه جدید مطابق معمول از منوی File ویژال استودیو ، گزینه New و سپس Project را انتخاب کنید و سپس قالب زیر را انتخاب کنید :http://psi-co.net/images/166میتوانید basic را انتخاب کنید ، اما basic شامل یک سری الگوهای آماده ، مثل Membership دات نت فریم ورک ، مراجع Jquery ، کلاسهای CSS از پیش ساخته شده استhttp://psi-co.net/images/167همانطور که می بینید پوشه های مجزایی برای هر دسته از فایلها وجود دارد : مثل Controller , View , Model , ... پوشه Script شامل فایلهای جاوا اسکریپت و Jquery و MicrosoftAjax است . پوشه Conetnt هم محلی برای نگهداری فایلهای CSS و تصاویر است. پوشه App_Data جایی است که فایل‌هایی با قابلیت read/write در آن قرار می‌گیرندمطابق شکل زیر اولین کنترلر خود را به پروژه اضافه کنید: نام کلاس کنترلر مطابق قرارداد، مختوم به کلمه Controller استhttp://psi-co.net/images/168http://psi-co.net/images/169برای اکشن یک View ایجاد می کنید و در آن ، مشخص می کنید که کاربر چه خروجی را باید مشاهده کند برای این کار روی اکشن راست کلیک کنید:http://psi-co.net/images/170خواهید دید که فایلی به نام Index.cshtml در فولدر View ایجاد می شود . به ازای هر Controller یک فولدر وجود دارد که در آن View های مربوطه نگهداری می شونداین فایل را باز کنید و محتویات زیر را به آن اضافه کنید:http://psi-co.net/images/171با فشردن دکمه F5 اولین صفحه وب خود را که با تکنولوژی MVC ساخته اید ببینید.خب تا اینجای کار یک پروژه جدید MVC ایجاد کردیم ، کمی در مورد ساختار MVC صحبت کردیم در مقالات بعدی بیشتر به بررسی امکانات این معماری زیبا خواهیم پرداخت.

fatima_h66
پنج شنبه 08 آبان 1393, 08:23 صبح
در این مقاله به بخش اصلی کنترلر mvc که همان action method ها هستند خواهیم پرداخت. به کمک همین action method هاست که میتوانیم به Request ها پاسخ دهیم. در ادامه با انواع مختلف خروجی یک action method آشنا خواهیم شد .در مقاله قبلی خواندیم که هر کنترلر شامل چندین متد public است که هر متد یک action ارائه میدهد که قرار است کنترلر بر روی مدل اجرا کند. این متد ها به اکشن متد معروف هستند. هر action method در کنترلر با یک URL مرتبط است. وقتی کنترلر ،درخواستی برای آن URL خاص دریافت میکند، Action متناسب با آن را اجرا کرده و view انتخابی را رندر کرده و به بروزر برمیگرداند.ساده ترین مقدار برگشتی یک اکشن متد میتواند یک string ساده باشد. بعنوان مثال میتوانیم متد Time() زیر را به مثال خود اضافه کنیم:? (http://psi-co.net/blog/working-with-action-methods#)



1
2
3
4
5
6

public ActionResult Index() {
return View();
}
public string Time() {
return string.Format("The time is: {0}", DateTime.Now.ToShortTimeString());
}






برگشت این string از اکشن متد به mvc اعلام میکند که گام بعدی فقط فرستادن این string به بروزر است بدون اضافه کردن هیچ تگ Html اضافی.حال برنامه را اجرا کنید و بعد از شماره پورت تایپ کنید : /Home/Time یعنی چیزی شبیه این http://localhost:60258/Home/Timehttp://psi-co.net/images/175پرواضح است که برگرداندن یک string ساده ، چندان کاربردی نیست. قدرت واقعی mvc در خروجی Action Result object های آن است. همان Object ای که در مثال اول این مقاله از آن استفاده کردیم:? (http://psi-co.net/blog/working-with-action-methods#)



1
2
3

public ActionResult Index() {
return View();
}






متد view() که ما در این اکشن متد استفاده کردیم ، به mvc اعلام میکند که باید یک view را رندر کند. متد View یک ViewResult Object برمیگرداند ک در واقع از همان ActionResult مشتق شده است. یعنی اگر ما به جای تابع Index قبلی از تابع زیر استفاده کنیم، تفاوتی در نتیجه خروجی نخواهیم داشت:? (http://psi-co.net/blog/working-with-action-methods#)



1
2
3

public ViewResult Index() {
return View();
}






مهم ترین فعالیت یک اکشن متد این است که view را رندر و Html مورد نظر را تولید کند. همانطور که اشاره شد متد View() بهترین روش برای رندر کردن View است. این متد چندین overload دارد، ساده ترین آن بدون پارامتر است.البته ما میتوانیم نام view ای که قرار است رندر شود هم به عنوان پارامتر به متد View بدهیم:? (http://psi-co.net/blog/working-with-action-methods#)



1
2
3

public ViewResult Index() {
return View("MyView");
}






یا به view ای که قرار است رندر شود، داده بفرستیم: برای تست این عملکرد بهتر است ابتدا داده خود را از طریق کلاس model فراهم کنیم: در پوشه مدل خود کلاس زیر را اضافه کنید:? (http://psi-co.net/blog/working-with-action-methods#)



1
2
3
4
5
6
7
8

namespace Psi_co.net.Models
{
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
}






حال میتوان یک نمونه از این object را در متد Index ایجاد کرده و سپس به view متناظر با آن ارسال می‌کنیم? (http://psi-co.net/blog/working-with-action-methods#)



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

using Psi_co.net.Models;

namespace Psi_co.net.Controllers
{
public class HomeController : Controller
{
//
// GET: /Home/

public ViewResult Index()
{
var student = new Person
{
firstName = "A.",
family = "Naseri"
};

return View(student);
}






در موارد خاص میتوان علاوه بر data موردنظر ، اسم view ای که قرار است رندر شود هم به عنوان پارامتر ارسال کنیم:? (http://psi-co.net/blog/working-with-action-methods#)



1
2
3

public ViewResult Index() {
return View("MyView", student);
}






Redirectionاستفاده دیگری که از کلاس actionResult برای ارائه خروجی استفاده میشود ، در زمینه Redirection است.برای redirect به متد دیگری در کنترلر مشابه از متد زیر استفاده میکنیم:? (http://psi-co.net/blog/working-with-action-methods#)



1
2
3

public RedirectToRouteResult Redirect() {
return RedirectToAction("Time");
}






یا برای رفتن به متد دیگر در کنترلر دیگر خواهیم نوشت:? (http://psi-co.net/blog/working-with-action-methods#)



1
2
3

public RedirectToRouteResult Redirect() {
return RedirectToAction("MyAction", "MyOtherController");
}






برای redirect به یک literal URL خواهیم نوشت:? (http://psi-co.net/blog/working-with-action-methods#)



1
2
3

public RedirectResult RedirectLiteral() {
return Redirect("http://www.psi-co.net (http://www.psi-co.net/)");
}






برای ارسال error به بروزر? (http://psi-co.net/blog/working-with-action-methods#)



1
2
3

public HttpStatusCodeResult StatusCode() {
return HttpNotFound();
}






? (http://psi-co.net/blog/working-with-action-methods#)



1
2
3
4

public HttpStatusCodeResult Status()
{
return new HttpStatusCodeResult(501, "Server Error");
}






? (http://psi-co.net/blog/working-with-action-methods#)



1
2
3
4

public HttpUnauthorizedResult Status()
{
return new HttpUnauthorizedResult("log in first,please");
}

fatima_h66
پنج شنبه 08 آبان 1393, 08:25 صبح
اینجا میخام مباحت بالاتر ا زمقدماتی از متوسط تا حرفه ای رو باهم بررسی کنیم
نظرم عوض شد!
کپی کردن مطالب و قرار دادنش زیاد بنظرم جالب نیست
بذارید وقتمون رو صرف مطالب حرفه ای کنیم

fatima_h66
یک شنبه 18 آبان 1393, 22:21 عصر
سرفصلهای دوره:

Overview of ASP.NET MVC

Model-View-Controller Pattern Explained
ASP.NET MVC Platform Architecture
Advantages/Disadvantages of MVC
Advantages/Disadvantages of WebForms
Using WebForms and MVC together

Sharing Data
Using Web Form Controls in MVC Views
Linking to MVC Actions from Web Forms



ASP.NET MVC Application Components

The Model
The View
The Controller
Understanding the MVC Execution Process
Developing Forms
Using HTML Helper Functions
Validating User Input


Developing Models

Creating Model Classes using ADO.NET
Creating Model Classes using LINQ
ADO.NET Entity Framework 4.1
Using MvcScaffolding


Developing Views

Working with Views
Using the Razor-View Engine to Create Dynamic Web Pages
Strongly-Typed Views
Rendering Elements with Helper Objects
Adding Validation
HTML5 Project Templates


Developing Controllers

Defining Action Methods
ActionResult Types

ViewResult
RedirectResult
JsonResult


IController Interface
Designing a Controller Class
ActionFilters


Routing Control

Routing in ASP.NET MVC
Defining URL Routes
Registering Routes
Creating URLs from Routes
Adding Constraints to Routes
Debugging Techniques


Developing ASP.NET MVC Applications

Installing Necessary Components
Using Action Methods
Using Different View Engines
ActionResult and ViewResult Classes
Rendering a View
Using Embedded Scripts
Strongly-Typed Views


MVC Unit Testing

Test-Driven Development

Test Cases and Classes


Using NUnit
Dependency Injection
Creating Unit Tests
Testing and Mocking Frameworks for ASP.NET MVC Applications


Securing MVC Applications

Defending against Attacks

Cross-site Scripting
Session Hijacking
SQL Injection
Input Forgery


Using Attributes to Secure an Application

fatima_h66
سه شنبه 27 آبان 1393, 21:52 عصر
معرفی ASP.NET Identityدر سال 2005 مایکروسافت ASP.NET Membership را معرفی کرد تا نیازهایی که تمامی برنامه نویسان برای احراز هویت و تعیین سطوح دسترسی کاربران داشتند را برطرف نماید.
در ابتدا سیستم ASP.NET Membership بسیاری از نیازهای برنامه نویسان را برطرف می نمود از جمله: ثبت نام، فراموشی کلمه عبور و تعیین گروه کاربر (هر کاربر می توانست در گروهایی همچون، Admin و سایر گروه هایی که شما تعریف می کردید قرار بگیرد) و... در نهایت این سیستم بسیار کمک بزرگی به برنامه نویسان کرد.
اما با گذشت زمان و تغییر و افزایش نیاز برنامه نویسان، سیستم ASP.NET Membership مشخص شد که دیگر پاسخگوی نیاز برنامه نویسان نیست بنابراین مایکروسافت سیستم جدیدی را با نام ASP.NET Identity را معرفی کرد که بسیار قدرتمندتر از سیستم ASP.NET Membership بود و همچنین امکانات جدیدی به آن اضافه شده بود ازجمله احراز هویت بر اساس سرویس های سایر سایتها و شبکه های اجتماعی مانند facebook, Google,.. و احراز هویت بر اساس سیستم های ارسال پیامک و امکانات دیگر که هر یک به نوبه خود جدید و بسیار مفید خواهند بود.

معرفی مفاهیم احراز هویتدر سیستم های احراز هویت دو مبحث اصلی وجود دارد
1- Authentication
Authentication برای تعیین هویت کاربر به کار می رود به عبارت ساده " Authentication وظیفه دارد تعیین کند شما چه کسی هستید؟". خوب مشخص است برای تعیین هویت باید شما نام کاربری و کلمه عبور خود را وارد نمایید.
2- Authorization
پس از آنکه تعیین شد شما چه کسی هستید باید مشخص شود شما چه کارهایی می توانید انجام دهید.
هر یک از این مفاهیم مکمل دیگری هستند و بخشی از سیستم احراز هویت را کنترل می کنند.
طبیعتا یک بار در بخش ورود به سیستم، مشخص می شود که شما چه کسی هستید اما در بخش های مختلف سایت باید مشخص شود شما آیا اجازه دارید کاری را انجام دهید یا خیر.

ایجاد یک پروژه با ASP.NET Identityبرای شروع کار با ASP.NET Identity شما می بایست یک پروژه با NET 4.5. ایجاد کنید (ASP.NET Identity فقط از NET 4.5. به بالا پشتیبانی می کند).
برای شروع کار یک پروژه به روش زیر در Visual Studio ایجاد نمایید.
http://bayanbox.ir/id/8013959303850283486?view (http://bayanbox.ir/id/8013959303850283486?view)

http://bayanbox.ir/id/8272889737447789395?view (http://bayanbox.ir/id/8272889737447789395?view)
حال دستور زیر را در package manager console بنویسید، تا یک پروژه نمونه برای کار با ASP.NET Identity نصب شود
PM> Install-Package Microsoft.AspNet.Identity.Samples -Pre حال شما می توانید در این پروژه نمونه از روش کار ASP.NET Identity اطلاع پیدا کنید.


برگرفته شده از EduOnline.Blog.ir

fatima_h66
سه شنبه 27 آبان 1393, 21:54 عصر
خطای زیر را مشاهده کنید:
An exception of type 'System.Web.Security.MembershipCreateUserException ' occurred in System.Web.dll but was not handled in user code

Additional information: The password supplied is invalid. Passwords must conform to the password strength requirements configured for the default provider.این خطا در خط زیر
Membership.CreateUser(dbAccount.UserName, dbAccount.Password);از تابع
public bool Authorize()
{
......ارسال شده است.
membershipبه دلیل اینکه شما در وب کانفیگ خود برای membership حداقل کلمه عبور را 6 کاراکتر ست کرده اید و کلمه عبور جاری که در اسکیوال شما وجود دارد کمتر از 6 کارکتر است این خطا رخ می دهد.
باید در Web.config خود درقسمت تنظیمان membership کد "minRequiredPasswordLength="6 را در صورتی که می خواهید حداقل طول کلمه عبور تغییر کند، تغییر دهید:
<profile defaultProvider="DefaultProfileProvider">
<providers>
<add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="Context" applicationName="/" />
</providers>
</profile>
<membership defaultProvider="DefaultMembershipProvider">
<providers>
<add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="Context" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
</providers>
</membership>
<roleManager defaultProvider="DefaultRoleProvider">
<providers>
<add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="Context" applicationName="/" />
</providers>
</roleManager>یا می توانید برای حل مشکل در مدل خود حداقل طول کلمه عبور را مطابق membership ایجاد نمایید تا مشکلی پیش نیاید
[Display(Name = "کلمه عبور")]
[Required(ErrorMessage = "رمز عبور را وارد نمائید")]
[MinLength(6, ErrorMessage = "حداقل طول کلمه عبور 6 حرف می باشد")]
[MaxLength(50, ErrorMessage = "رمز عبور مجاز نمی باشد")]
[DataType(DataType.Password)]
public string Password


برگرفته شده از EduOnline.Blog.ir

fatima_h66
سه شنبه 27 آبان 1393, 21:54 عصر
معرفی ASP.NET Identityدر سال 2005 مایکروسافت ASP.NET Membership را معرفی کرد تا نیازهایی که تمامی برنامه نویسان برای احراز هویت و تعیین سطوح دسترسی کاربران داشتند را برطرف نماید.
در ابتدا سیستم ASP.NET Membership بسیاری از نیازهای برنامه نویسان را برطرف می نمود از جمله: ثبت نام، فراموشی کلمه عبور و تعیین گروه کاربر (هر کاربر می توانست در گروهایی همچون، Admin و سایر گروه هایی که شما تعریف می کردید قرار بگیرد) و... در نهایت این سیستم بسیار کمک بزرگی به برنامه نویسان کرد.
اما با گذشت زمان و تغییر و افزایش نیاز برنامه نویسان، سیستم ASP.NET Membership مشخص شد که دیگر پاسخگوی نیاز برنامه نویسان نیست بنابراین مایکروسافت سیستم جدیدی را با نام ASP.NET Identity را معرفی کرد که بسیار قدرتمندتر از سیستم ASP.NET Membership بود و همچنین امکانات جدیدی به آن اضافه شده بود ازجمله احراز هویت بر اساس سرویس های سایر سایتها و شبکه های اجتماعی مانند facebook, Google,.. و احراز هویت بر اساس سیستم های ارسال پیامک و امکانات دیگر که هر یک به نوبه خود جدید و بسیار مفید خواهند بود.

معرفی مفاهیم احراز هویتدر سیستم های احراز هویت دو مبحث اصلی وجود دارد
1- Authentication
Authentication برای تعیین هویت کاربر به کار می رود به عبارت ساده " Authentication وظیفه دارد تعیین کند شما چه کسی هستید؟". خوب مشخص است برای تعیین هویت باید شما نام کاربری و کلمه عبور خود را وارد نمایید.
2- Authorization
پس از آنکه تعیین شد شما چه کسی هستید باید مشخص شود شما چه کارهایی می توانید انجام دهید.
هر یک از این مفاهیم مکمل دیگری هستند و بخشی از سیستم احراز هویت را کنترل می کنند.
طبیعتا یک بار در بخش ورود به سیستم، مشخص می شود که شما چه کسی هستید اما در بخش های مختلف سایت باید مشخص شود شما آیا اجازه دارید کاری را انجام دهید یا خیر.

ایجاد یک پروژه با ASP.NET Identityبرای شروع کار با ASP.NET Identity شما می بایست یک پروژه با NET 4.5. ایجاد کنید (ASP.NET Identity فقط از NET 4.5. به بالا پشتیبانی می کند).
برای شروع کار یک پروژه به روش زیر در Visual Studio ایجاد نمایید.
http://bayanbox.ir/id/8013959303850283486?view (http://bayanbox.ir/id/8013959303850283486?view)

http://bayanbox.ir/id/8272889737447789395?view (http://bayanbox.ir/id/8272889737447789395?view)
حال دستور زیر را در package manager console بنویسید، تا یک پروژه نمونه برای کار با ASP.NET Identity نصب شود
PM> Install-Package Microsoft.AspNet.Identity.Samples -Pre حال شما می توانید در این پروژه نمونه از روش کار ASP.NET Identity اطلاع پیدا کنید.


برگرفته شده از EduOnline.Blog.ir

fatima_h66
سه شنبه 27 آبان 1393, 21:58 عصر
خطای زیر را مشاهده کنید:
An exception of type 'System.Web.Security.MembershipCreateUserException ' occurred in System.Web.dll but was not handled in user code

Additional information: The password supplied is invalid. Passwords must conform to the password strength requirements configured for the default provider.این خطا در خط زیر
Membership.CreateUser(dbAccount.UserName, dbAccount.Password);از تابع
public bool Authorize()
{
......ارسال شده است.
membershipبه دلیل اینکه شما در وب کانفیگ خود برای membership حداقل کلمه عبور را 6 کاراکتر ست کرده اید و کلمه عبور جاری که در اسکیوال شما وجود دارد کمتر از 6 کارکتر است این خطا رخ می دهد.
باید در Web.config خود درقسمت تنظیمان membership کد "minRequiredPasswordLength="6 را در صورتی که می خواهید حداقل طول کلمه عبور تغییر کند، تغییر دهید:
<profile defaultProvider="DefaultProfileProvider">
<providers>
<add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="Context" applicationName="/" />
</providers>
</profile>
<membership defaultProvider="DefaultMembershipProvider">
<providers>
<add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="Context" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
</providers>
</membership>
<roleManager defaultProvider="DefaultRoleProvider">
<providers>
<add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="Context" applicationName="/" />
</providers>
</roleManager>یا می توانید برای حل مشکل در مدل خود حداقل طول کلمه عبور را مطابق membership ایجاد نمایید تا مشکلی پیش نیاید
[Display(Name = "کلمه عبور")]
[Required(ErrorMessage = "رمز عبور را وارد نمائید")]
[MinLength(6, ErrorMessage = "حداقل طول کلمه عبور 6 حرف می باشد")]
[MaxLength(50, ErrorMessage = "رمز عبور مجاز نمی باشد")]
[DataType(DataType.Password)]
public string Password


برگرفته شده از EduOnline.Blog.ir

fatima_h66
سه شنبه 27 آبان 1393, 21:59 عصر
در نهایت آموزش فایل ورد آموزش هم قرار میدم تا از این آشفتگی در بیاد آموزش ها.

fatima_h66
سه شنبه 27 آبان 1393, 22:01 عصر
در نهایت آموزش فایل ورد آموزش هم قرار میدم تا از این آشفتگی در بیاد آموزش ها.

fatima_h66
سه شنبه 27 آبان 1393, 22:05 عصر
کل کد پروژه را نیز برای شما قرار دادم تا بتوانید بهتر پروژه را بررسی کنید.
آموزش Asp.net Identity (http://bayanbox.ir/id/4090262340423577588?download)
password: www.eduonline.ir

fatima_h66
سه شنبه 27 آبان 1393, 22:21 عصر
افزایش سرعت Insert کردن رکورد ها در MVC (http://dadehnegar.blog.ir/post/%D8%A7%D9%81%D8%B2%D8%A7%DB%8C%D8%B4-%D8%B3%D8%B1%D8%B9%D8%AA-Insert-%DA%A9%D8%B1%D8%AF%D9%86-%D8%B1%DA%A9%D9%88%D8%B1%D8%AF-%D9%87%D8%A7-%D8%AF%D8%B1-MVC)سه شنبه, ۲۴ تیر ۱۳۹۳، ۰۴:۱۷ ب.ظ


بسم الله الرحمن الرحیم



در این آموزش می خواهیم با روش جدید Insert کردن رکوردهایی با تعداد بالا به وسیله MVC آشنا کنیم و همچنین نحوه افزایش سرعت Insert کردن را فرا بگیریم.
EntityFramework.BulkInsert
یک extension برای Entity framework 4 به بالا است که سرعت Insert کردن شما در insert های عظیم تا 20 برابر افزایش می دهد.
این extension از روش Code First و Database First پشتیبانی می کند.
http://bayanbox.ir/id/3365627880768484972?view (http://bayanbox.ir/id/3365627880768484972?view)
برای نصب این افزونه کافی است در Package Manager Console دستورات زیر را اجرا کنید
Nugetنسخه EF4PM> Install-Package EntityFramework.BulkInsert-ef4
https://www.nuget.org/packages/EntityFramework.BulkInsert-ef4نسخه EF5PM> Install-Package EntityFramework.BulkInsert-ef5
https://www.nuget.org/packages/EntityFramework.BulkInsert-ef5نسخه EF6PM> Install-Package EntityFramework.BulkInsert-ef6
https://www.nuget.org/packages/EntityFramework.BulkInsert-ef6پشتیبانی

تمامی نسخه های Entity Framework موجود در nuget
Code-First
Database-First (از نسخه Entity Framework 6.0.0)
Table-Per-Hirerachy
Table-Per-Type

روش استفادهبرای استفاده از این افزونه باید آن را در کلاس خود using کنید
using EntityFramework.BulkInsert.Extensions;قسمت پیچیده کار برای درج اطلاعات :)
context.BulkInsert(entities);

دستور زیر بلافاصله پس از فراخوانی درون transaction خود اجرا می شود. برای ترکیب کردن Bulk و DbContext باید از TransactionScope استفاده کنید.
using (var ctx = GetContext())
{
using (var transactionScope = new TransactionScope())
{
// some stuff in dbcontext

ctx.BulkInsert(entities);

ctx.SaveChanges();
transactionScope.Complete();
}
}




برگرفته شده از EduOnline.Blog.ir

fatima_h66
سه شنبه 27 آبان 1393, 22:23 عصر
بسم الله الرحمن الرحیم

می خواهیم به تمامی لیست هایی که از نوع double ایجاد می شوند یک متد برای پیدا کردن عنصر میانی آنها بنویسیم

public static class LINQExtension
{
public static double Median(this IEnumerable<double> source)
{
if (source.Count() == 0)
{
throw new InvalidOperationException("Cannot compute median for an empty set.");
}

var sortedList = from number in source
orderby number
select number;

int itemIndex = (int)sortedList.Count() / 2;

if (sortedList.Count() % 2 == 0)
{
// Even number of items.
return (sortedList.ElementAt(itemIndex) + sortedList.ElementAt(itemIndex - 1)) / 2;
}
else
{
// Odd number of items.
return sortedList.ElementAt(itemIndex);
}
}
}
برای استفاده از این متد کافی است که یک لیست از double ایجاد کنیم و به صورت زیر تابع خود را صدا بزنیم:


double[] numbers1 = { 1.9, 2, 8, 4, 5.7, 6, 7.2, 0 };

var query1 = numbers1.Median();

Console.WriteLine("double: Median = " + query1);



...


/*
This code produces the following output:

Double: Median = 4.85
*/
حال می توانیم این متد را برای نوع های دیگری چون int نیز بازنویسی کنیم:

//int overload

public static double Median(this IEnumerable<int> source)
{
return (from num in source select (double)num).Median();
}
حال می توانیم متد خود را برای نوع های int و double استفاده کنیم

double[] numbers1 = { 1.9, 2, 8, 4, 5.7, 6, 7.2, 0 };

var query1 = numbers1.Median();

Console.WriteLine("double: Median = " + query1);



...


int[] numbers2 = { 1, 2, 3, 4, 5 };

var query2 = numbers2.Median();

Console.WriteLine("int: Median = " + query2);



...


/*
This code produces the following output:

Double: Median = 4.85
Integer: Median = 3
*/

شما همچنین می توانید برای نوع های Generic این متد را overload کنید. این Overload یک Delegate به عنوان پارارمتر ایجاد می کند و تا بخ وسیله آن یک مجموعه یا لیست Generic را به یک نوع مشخص تبدیل کند.
متد زیر نشان می دهد که ما چطور یک Func<T, TResult> را به عنوان پارامتر ایجاد کرده ایم، این Delegate یک شی از نوع Generic T ایجاد می کند و یک نوع double بر می گرداند.

// Generic overload.

public static double Median<T>(this IEnumerable<T> numbers,
Func<T, double> selector)
{
return (from num in numbers select selector(num)).Median();
}
در این مثال شما متوجه شدید که چطور می توانیم یک متد LINQ بنویسیم تا در تمامی نوع هایی که کاربر از آن شی ایی ایجاد می کند، متد خود را استفاده کنیم.
نحوه استفاده از متد:

int[] numbers3 = { 1, 2, 3, 4, 5 };

/*
You can use the num=>num lambda expression as a parameter for the Median method
so that the compiler will implicitly convert its value to double.
If there is no implicit conversion, the compiler will display an error message.
*/

var query3 = numbers3.Median(num => num);

Console.WriteLine("int: Median = " + query3);

string[] numbers4 = { "one", "two", "three", "four", "five" };

// With the generic overload, you can also use numeric properties of objects.

var query4 = numbers4.Median(str => str.Length);

Console.WriteLine("String: Median = " + query4);

/*
This code produces the following output:

Integer: Median = 3
String: Median = 4
*/

اگر بخواهیم برای متد خود یک مجموعه یا لیست را به عنوان خروجی متد تعیین کنیم، می بایست به صورت زیر متد خود را با استفاده از اینترفیس IEnumerable<T> ایجاد کنیم
// Extension method for the IEnumerable<T> interface.
// The method returns every other element of a sequence.

public static IEnumerable<T> AlternateElements<T>(this IEnumerable<T> source)
{
List<T> list = new List<T>();

int i = 0;

foreach (var element in source)
{
if (i % 2 == 0)
{
list.Add(element);
}

i++;
}

return list;
}
فراخوانی متد
string[] strings = { "a", "b", "c", "d", "e" };

var query = strings.AlternateElements();

foreach (var element in query)
{
Console.WriteLine(element);
}
/*
This code produces the following output:

a
c
e
*/



http://www.blog.ir/media/images/cleardot.gif ۰ (http://dadehnegar.blog.ir/process/rate_post/YFzXuGSubDs/2)http://www.blog.ir/media/images/cleardot.gif ۰ (http://dadehnegar.blog.ir/process/rate_post/YFzXuGSubDs/1)
۹۳/۰۴/۲۴
۱۴۶ نمایش




اسماعیل شیدایی



اضافه کردن متد به LINQ (http://dadehnegar.blog.ir/tag/%D8%A7%D8%B6%D8%A7%D9%81%D9%87%20%DA%A9%D8%B1%D8%A F%D9%86%20%D9%85%D8%AA%D8%AF%20%D8%A8%D9%87%20LINQ )



برگرفته شده از EduOnline.Blog.ir

fatima_h66
سه شنبه 27 آبان 1393, 22:24 عصر
می خواهیم یک Extesion Method مانند متدهای Linq برای Model ایی خاص بنویسیم.دو نکته را برای نوشتم متدهای توسعه (Extension Method) باید رعایت کنید:1- متد را باید در کلاسی بنویسید که از نوع static باشد2- namespace شما باید با namespace کلاسی که می خواهید برای آن Extension Method بنویسید یکسان باشدما می خواهیم وقتی از شی DbContext مدل Active را انتخاب می کنیم مانند متد ()FirstOrDefault لینک (LINQ) یک متد برای اجرای یک دستور خاص نمایش داده شود:
public static class Extensions
{
public IQueryable<T> Active<T>(this IQueryable<T> source)
where T : YourEntityType
{
return source.Where(a => ((a.publishEnd > DateTime.Now) || (a.publishEnd == null))
&& ((a.publishStart <= DateTime.Now) || (a.publishStart == null))
&& a.active == true);
}
}
برای فراخوانی متد به صورت زیر می توانیم عمل کنیم:
var item = db.myTable.Active().SingleOrDefault(...);











برگرفته شده از EduOnline.Blog.ir

RIG000
چهارشنبه 28 آبان 1393, 00:05 صبح
خوب میشد از تگ کد استفاده میکردی که کدها تو صفحه پریشون نشن. از اینکه مطالب مفید میگذارید هم ممنونیم

moferferi
چهارشنبه 28 آبان 1393, 13:29 عصر
سلام.
دوست عزیر اول از بایت زحمت تون تشکر میکنم.
دوم اینکه این روش اموزشی که شما پیش گرفتین اصلا خوب نیست.
مطالب به صورت پراکنده،ناقص و ... هست.

دوستانی که میخوان mvc یاد بگیرن و تازه کار هستن میتونن به لینک زیر برن .یه سری ویدئو فارسی رایگان و خیلی خوب هست که میتونه بهشون کمک کنه (http://www.tolooco.ir/web-design/aspnet-mvc/beginner)