۱۹ مطلب با کلمهی کلیدی «آموزش asp.net MVC» ثبت شده است
انتقال اطلاعات Database در MVC
بسم الله الرحمن الرحیم
بسیاری از مواقع شما نیاز دارید اطلاعات درون پایگاه داد خود را به پایگاه داده دیگری انتقال دهید.
در مطلب تبدیل اطلاعات یک SQL Server به نسخه SQL Server پایین تر نحوه انتقال اطلاعات را از یک نسخه جدید SQL Server به نسخه های قدیمی تر توضیح دادیم. در مطلب بالا توضیح دادیم چطور می توانید فقط اطلاعات و داده های درون پایگاه داده را بدون ساختار پایگاه داده (مانند کدهای تولید View,Table و...) انتخاب کنید.
ادامه مطلب...paging و sorting در webgrid
بسم الله الرحمن الرحیم
آموزش ساخت paging و sorting اختصاصی در webgrid
اضافه کردن خاصیت های paging و sorting در webgrid بسیار ساده است. اگر شما می خواهید این خاصیت های پیش فرض را کنترل کنید باید تنظیماتی را انجام دهید. در این مقاله می خواهیم خاصیت های paging و sortingرا به صورت اختصاصی تغییر دهیم. لطفا ابتدا مقاله "آموزش طراحی یک وب گرید به صورت Ajax" که در همین سایت نوشته شد، بخوانید.
ایجاد یک Model
ما به صورت Database First این پروژه را انجام خواهیم داد، Table ما با نام Customer به صورت زیر است.
ادامه مطلب...
ASP.NET vNext
بسم الله الرحمن الرحیم
معرفی ASP.NET vNext
مایکروسافت نسل جدیدی از ASP.NET را در TechEd North America در تاریخ اعلام 12 May 2014 اعلام کرد که این محصول جدید ASP.NET vNext نام دارد. ASP.NET vNext شامل امکانات جدیدی همچون نسخه MVC6 که برای Cloud بهینه سازی شده است و Web API3،Web Pages4, SignalR3 و Entity Framework7 است.
ویژگی های ASP.NET vNext
ASP.NET vNext شامل امکانات جدیدی همچون نسخه MVC6 که برای Cloud بهینه سازی شده است Web API, Web Pages, SignalR و Entity Framework است.
Cache کردن اطلاعات ASP.NET MVC
بسم الله الرحمن الرحیم
در این بخش قصد داریم نحوه افزایش سرعت بارگذاری صفحات در ASP.NET MVC را بررسی کنیم.
افزایش سرعت صفحات در ASP.NET MVC
برای افزایش کارایی برنامه های تحت وب Cache کردن اطلاعات بسیار مهم است. کش کردن اطلاعات یک راه برای ذخیره سازی اطلاعاتی است که مجددا باید مورد دسترسی قرار می گیرند. در عمل این یک راه موثر برای افزایش کارایی وب سایت ها است.
مزایای کش کردن اطلاعات
کاهش میزبانی اطلاعات بر روی سرور
هنگامی که شما اطلاعات را بر روی کلاینت یا پروکسی کش می کنید، عملا سرور شما درخواست های کمتری را باید پاسخ دهد.
کاهش فشار بر روی پایگاه داده
وقتی شما اطلاعات را در وب سرور کش کنید، می توانید درخواست ها را از دیتابیس حذف کنید.
کاهش ترافیک شبکه
هنگامی که شما اطلاعات را بر روی کلاینت کش می کنید، ترافیک شبکه شما کاهش پیدا می کند.
حذف زمان ها برای بازیابی اطلاعات تکراری
زمان هایی که صرف استفاده از اطلاعاتی که چندین بار مورد درخواست قرار خواهند گرفت، حذف می شود
افزایش کارایی
هنگامی که اطلاعات را کش می کنید، زمان کمتری برای بازیابی اطلاعات لازم است، ترافیک شبکه کمتر مصرف می شود، به سرور کمتر برای پاسخگویی نیاز خواهد بود و همه این کارهای باعث می شود تا کارایی سایت شما افزایش پیدا کند.
ساخت یک Timer در ASP.NET MVC
بسم الله الرحمن الرحیم
استفاده از setInterval را در این آموزش بررسی کردیم، حال می خواهیم با استفاده از setInterval در یک پروژه ASP.NET MVC یک Timer به وجود آوریم.
در صفحات وب می توانید به صورت زیر عمل کنید
setInterval("updateWhatever();",10000); function updateWhatever() { jQuery.getJSON(actionUrl, function(result) { // result is the viewdata object. }); }
در پروژه ASP.NET MVC خود به صورت زیر عمل کنید:
View:
<script> window.setInterval("FunctionThatCallControllerMethod()", 10000); function FunctionThatCallControllerMethod() { This is the part where I have no idea!!! } </script> Something like an Updatepanel needed aroud this???? Mailcount: <%= ViewData["Mailcount"] %>
Controller:
public ActionResult GetMailcount() { // Go to db and get mailcount ViewData["Mailcount"] = 12; return View(); }
ساخت یک Timer با استفاده از setInterval برای صفحات وب
بسم الله الرحمن الرحیم
در بسیاری از مواقع شما نیاز دارید در صفحات وب خود از یک تایمر برای اجرا و تکرار دستورات استفاده کنید، در ASP.NET می توانستید از یک Timer در پنل های Ajax استفاده کنید اما در ASP.NET MVC باید این مشکل را به صورت زیر حل کنید:
متد setInterval
این متد بر اساس پارمتر خود که یک عدد integer و با واحد زمانی میلی ثانیه است، دستورات مشخص شده ای را اجرا می کند.
var retval = window.setInterval(expression, msec, language);
پارامتر expression
نوع پارامتر: Variant
توضیح : یک Pointer یا یک String است به متد یا دستوراتی که باید در هر بار اجرا شدن تایمر، فراخوانی و اجرا شوند.
پارامتر msec
نوع پارامتر: Integer
توضیح : بازه های زمانی تکرار این تایمر را مشخص می کند که بر اساس میلی ثانیه می باشد.
پارامتر language (اختیاری)
نوع پارامتر: Variant
پارامتری اختیاری است که یکی از مقادیر خاصیت Language را می تواند دریافت کند.
Return value
Type: Integer
توضیح : یک عدد Integer که مشخص می کند تایمر توسط متد clearInterval متوقف شده است.
ساخت Scroll Top
بسم الله الرحمن الرحیم
طبیعتا همه شما دکمه های Top را در کنار صفحات وب سایت ها دیده اید که با کلیک بر روی آن می توانید به بالای سایت باز گردید.
در این آموزش می خواهیم کد این دکمه را در jQuery بنویسیم.
یک صفحه HTML ایجاد کنید و کد jQuery را به صفحه خود اضافه کنید.
jquery-1.8.0.min.js
سپس یک فایل js ایجاد کنید و کد زیر را در آن قرار دهید.
$.fn.scrollView = function () {
return this.each(function () {
$('html, body').animate({
scrollTop: $(this).offset().top
}, 1000);
});
}
با استفاده از این کد ما ظرف مدت زمان یک ثانیه از محلی که بر روی لینک کلیک می کنیم به ابتدای صفحه انتقال پیدا می کنیم.
کد زیر را نیز در همین فایل قرار دهید.
$('#scroll-link').click(function (event) {
event.preventDefault();
$('#header').scrollView();
});
header ای دی element ای است که در ابتدای صفحه قرار می دهیم و می خواهیم پس از کلیک بر روی scroll-link به آن جا انتقال پیدا کنیم
حال این فایل را نیز به صفحه خود اضافه کنید.
در بالای صفحه یک div با id منحصر به فردی ایجاد کنید تا هنگامی که ما بر روی لینک پایین صفحه کلیک می کنیم به این div لینک شود.
<div id="header"></div>
در پایین صفحه یک تگ a به صورت زیر اضافه کنید
<a href="#" id="scroll-link">TOP</a>
در نهایت صفحه خود را با مطلبی پر کنید تا اسکرول آن نمایش داده شود
کد این آموزش را می توانید از این جا دانلود کنید.
پسورد فایل
EduOnline.ir
دانلود jQuery Scroll bar
حجم: 32.7 کیلوبایت
نحوه بدست آوردن تمامی Action و Controller های یک پروژه MVC
بسم الله الرحمن الرحیم
ممکن است شما بخواهید در یک پروژه MVC لیست تمامی کنترلر ها و اکشن های پروژه خود بدست آورید.
در اینجا یک Extension متد نوشته ام که می توانید به سادگی لیست تمامی کنتترلرهای برنامه خود را بدست اورید:
اگر با متدهای توسعه یا همان Extension متد آشنایی ندارید، این مطلب را بخوانید
public static List<string> GetControllerNames(this System.Web.Mvc.Controller controller)
{
try
{
List<string> controllerNames = new List<string>();
GetSubClasses<System.Web.Mvc.Controller>().ForEach(
type => controllerNames.Add(type.Name));
return controllerNames;
}
catch (Exception exception)
{
throw new Exception(exception.Message);
}
}
برای استفاده از این کنترلر کافی است به صورت زیر عمل کتید
List<string> listController = Controller.GetControllerNames();
ممکن است بخواهید لیست اکشن های یک کنترلر را نیز بدست آورید برای این کار نیز یک متد دیگر نوشته ام که اینکار را برای شما انجام می دهد
public static List<string> ActionNames(string controllerName)
{
try
{
var types =
from assemblies in AppDomain.CurrentDomain.GetAssemblies()
from assembliesTypes in assemblies.GetTypes()
where typeof(System.Web.Mvc.IController).IsAssignableFrom(assembliesTypes) &&
string.Equals(controllerName + "Controller", assembliesTypes.Name, StringComparison.OrdinalIgnoreCase)
select assembliesTypes;
var controllerType = types.FirstOrDefault();
if (controllerType == null)
{
return Enumerable.Empty<string>().ToList();
}
return new System.Web.Mvc.ReflectedControllerDescriptor(controllerType)
.GetCanonicalActions().Select(x => x.ActionName)
.ToList();
}
catch (Exception exception)
{
throw new Exception(exception.Message);
}
}
برای استفاده از این متد باید به صورت زیر عمل کنید:
List<string> listAction = ActionNames("AccountController");
انشالله که مفید واقع شود.
بدست آوردن تمامی کلاس های یک namespace
بسم الله الرحمن الرحیم
با استفاده از کد زیر شما می توانید نام تمامی کلاس های موجود در یک namespace را بدست آورید
using System.Reflection;
private Type[] GetTypesInNamespace(Assembly assembly, string nameSpace)
{
return assembly.GetTypes().Where(t => String.Equals(t.Namespace, nameSpace, StringComparison.Ordinal)).ToArray();
}
برای استفاده باید به صورت زیر عمل کنید
Type[] typelist = GetTypesInNamespace(Assembly.GetExecutingAssembly(), "MyNamespace");
for (int i = 0; i < typelist.Length; i++)
{
Console.WriteLine(typelist[i].Name);
}
آموزش serialize کردن اشیا
بسم الله الرحمن الرحیم
ممکن است شما بخواهید یک شی از کلاس را در یک XML فایل ذخیره کنید، برای این کار می بایست شی خود را serialize کنید.
در این آموزش نحوه serialize را بررسی خواهیم کرد.
یک پروژه جدید از نوع windows Application ایجاد کنید.
یک کلاس با نام MyClass به پروژه اضافه کنید و کد آن را به صورت زیر تغییر دهید:
public class MyClassادامه مطلب...
{
// old school property
private int _Age;
public int Age
{
get { return _Age; }
set { _Age = value; }
}
// new school property
public bool Citizen { get; set; }
// there's nothing wrong with using fields
public string Name;
}
serialize کردن به وسیله سی شارپ
بسم الله الرحمن الرحیم
در بسیاری از مواقع شما نیاز دارید یک شی را به صورت serialize ذخیره کنید، مثلا ذخیره کردن یک شی از کلاس user در کوکی و یا ذخیره کردن آن در ASP.NET Identity Claims و...
در این آموزش نحوه serialize را بررسی خواهیم کرد.
یک پروژه جدید از نوع Console Application ایجاد کنید.
یک کلاس با نام clsPerson به پروژه اضافه کنید.
Property های زیر را به کلاس اضافه کنید
public string FirstName;
public string MI;
public string LastName;
درون متد main کلاس Program.cs یک شی از کلاس clsPerson ایجاد کنید:
clsPerson p = new clsPerson();
Property های کلاس را مقدار دهی کنید
p.FirstName = "Esmaeil";
p.MI = "A";
p.LastName = "Sheidaei";
کلاس XmlSerializer برای ایجاد یک شی جدید نیاز دارد نوع شی ایی را که شما می خواهید به serialize تبدیل کنید بداند به همین دلیل ما در زمان ایجاد شی از کلاس XmlSerializer نوع p را به آن اطلاع می دهیم که طبیعتا نوع شی ما در این جا clsPerson است.
ادامه مطلب...افزایش سرعت Insert کردن رکورد ها در MVC
بسم الله الرحمن الرحیم
در این آموزش می خواهیم با روش جدید Insert کردن رکوردهایی با تعداد بالا به وسیله MVC آشنا کنیم و همچنین نحوه افزایش سرعت Insert کردن را فرا بگیریم.
EntityFramework.BulkInsert
یک extension برای Entity framework 4 به بالا است که سرعت Insert کردن شما در insert های عظیم تا 20 برابر افزایش می دهد.
این extension از روش Code First و Database First پشتیبانی می کند.
اضافه کردن متد به LINQ
بسم الله الرحمن الرحیم
می خواهیم به تمامی لیست هایی که از نوع 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);
}
}
}
ادامه مطلب...
Linq extension method
بسم الله الرحمن الرحیم
می خواهیم یک 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(...);
خطا Validation failed for one or more entities
بسم الله الرحمن الرحیم
طبیعتا تاکنون در حین اجرای پروژه با خطای زیر برخورد کردید:
Validation failed for one or more entities. See 'EntityValidationErrors' property for more details. Description:
An unhandled exception occurred during the execution of the current web request.
Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Data.Entity.Validation.DbEntityValidationException:
Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
هر یک از شما دوستان ممکن است راه حل های زیادی برای حل این مشکل داشته باشید.
در اینجا خطایی به دلیل خالی بودن و تکمیل نشده اطلاعات رخ می دهد در صورتی که ممکن است این فیلدها بر روی فرم اصلا وجود نداشته اند مثلا شما یک ویو مدل از مدل ساخته اید و تنها بخشی از اطلاعات مدل را می خواهید برروز کنید.
خطا Cannot insert the value NULL into column
بسم الله الرحمن الرحیم
خطای زیر را مشاهده کنید:
Cannot insert the value NULL into column 'FirstLastName', table 'RequestSessions'; column does not allow nulls. INSERT fails.The statement has been terminated.
در مدلی که دارید کار می کنید فیلدی وجود دارد که در دیتابیس نمی تواند null باشد برای رفع این مشکل باید در اکشن خود مدل را مقدار دهی کنید
مثلا
Account.FirstLastName=”Esmaeil”;
آموزش Asp.net Membership
بسم الله الرحمن الرحیم
خطای زیر را مشاهده کنید:
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
آموزش Entity Framework
بسم الله الرحمن الرحیم
ممکن است شما بخواهید یک enumایجاد کنید و سپس این enum را در دیتابیس ذخیره کنید.برای این کار کافی است کد زیر را Model خود قرار دهید
public DataKind Kind { get; set; }
که در واقع DataKind یک enum است که قبلا به صورت زیر تعریف شده است
namespace Ad.NegCred.Data.Model {
public enum DataKind {
F, //Takibe alınıp henüz tahsil edilmeyen ferdi kredi bildirimi
FA, //Aynı dönemde takibe alınan ve tahsil edilen ferdi kredi bildirimi
FF, //daha önceki dönemlerde takibe alındığı bildirilmiş ferdi kredi tahsil bildirimi
K, //Takibe alınıp henüz tahsil edilmeyan kredi kartı
KA, //Aynı dönemde takibe alınan ve tahsil edilen kredi kartı
KF //Daha önceki dönemlerde takibe alındığı bildirilmiş kredi kartı tahsil bildirimi
}
public class Datum {
[Key]
public long Id { get; set; }
public DataKind Kind { get; set; }
[StringLength(25, MinimumLength = 2)]
public string Name { get; set; }
}
}
حال اگر بخواهیم یک مثال کامل داشته باشیم، کد Model و enum ما به صورت زیر خواهد بود
namespace Ad.NegCred.Data.Model {
public enum DataKind {
F,
FA,
FF,
K,
KA,
KF
}
public class Datum {
[Key]
public long Id { get; set; }
public DataKind Kind { get; set; }
[StringLength(25, MinimumLength = 2)]
public string Name { get; set; }
}
}
حال اگر پروژه را اجرا کنید متوجه خواهید شد که فیلد enum به دیتابیس اضافه نشده است!؟
علت؟
EF 5 و .NET Framework 4 نمی تواند فیلد enum را ایجاد کند زمانی که System.Data.Entity.dll در .NET Framework 4 به وسیله EntityFrameork.dll استفاده می شود این کار صورت نخواهد گرفت برای حل این مشکل می بایست از EF5 و .NET Framework 4.5 با یکدیگر یا EF6 و.NET Framework 4 استفاده کنید که دیگر در اینجا (EF 6) ارتباطی با کامپوننت های داخلی NET Framework. ندارد.
آموزش Asp.net Identity MVC
بسم الله الرحمن الرحیم
پس از اراائه ASP.NET Identity امکانات جدیدی در اختیار برنامه نویسان قرار گرفت ولی متاسفانه کمی این تکنولوژی کمی گیج کننده است. به همین دلیل سعی کردم یک مثال را برای شما عزیزان در اینجا قرار دهم.
در این مقاله authentication بر اساس cookie را در ASP.NET Identity بررسی خواهیم کرد.
Project Setup
یک Empty ASP.NET MVC web application ایجاد کنید.
• از منوی File گزینه New Project و سپس "ASP.NET Web Application" را انتخاب کنید.
• از پنجره باز شدهASP.NET گزینه "Empty" و در قسمت تنظیمات گزینه MVC را انتخاب کنید.
حال یک پروژه ASP.NET MVC application ایجاد کردید.