۸ سال و ۸ ماه قبل، جمعه ۱۶ بهمن ۱۳۹۴، ساعت ۱۹:۰۳
۸ سال و ۸ ماه قبل، جمعه ۱۶ بهمن ۱۳۹۴، ساعت ۱۷:۲۷
یک نکتهی تکمیلی
تعیین شماره نگارش IE مورد استفادهی توسط برنامه به صورت خودکار:
در اینجا شماره نگارش IE از کنترل WebBrowser دریافت میشود و همیشه به آخرین نگارش تنظیم خواهد شد و همچنین چون از Registry.CurrentUser استفاده میکند، نیازی به دسترسی مدیریتی برای اعمال ندارد.
تعیین شماره نگارش IE مورد استفادهی توسط برنامه به صورت خودکار:
using System; using System.Diagnostics; using Microsoft.Win32; using System.Windows.Forms; namespace Core { public static class UseLatestVersionOfIE { /// <summary> /// Use the latest version of IE in WebBrowser control /// </summary> public static void SetWebBrowserVersion() { RegistryKey regkey = null; try { regkey = Registry.CurrentUser.OpenSubKey(@"SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", writable: true); if (regkey == null) { return; } var regVal = getInstalledIEVersion(); var appName = string.Format("{0}.exe", Process.GetCurrentProcess().ProcessName); regkey.SetValue(appName, regVal, RegistryValueKind.DWord); } catch (Exception ex) { // todo: log ... } finally { if (regkey != null) { regkey.Close(); } } } private static int getInstalledIEVersion() { int browserVer; using (var wb = new WebBrowser()) { browserVer = wb.Version.Major; } int regVal; if (browserVer >= 11) regVal = 11001; else switch (browserVer) { case 10: regVal = 10001; break; case 9: regVal = 9999; break; case 8: regVal = 8888; break; default: regVal = 7000; break; } return regVal; } } }
۸ سال و ۸ ماه قبل، چهارشنبه ۱۴ بهمن ۱۳۹۴، ساعت ۱۵:۵۰
Guid از نوع IConvertible نیست. به همین جهت باید به این صورت عمل کنید:
و یا
Guid.Parse(User.Identity.GetUserId())
public static class IdentityExtensions { public static Guid GetGuidUserId(this IIdentity identity) { Guid result = Guid.Empty; Guid.TryParse(identity.GetUserId(), out result); return result; } }
۸ سال و ۸ ماه قبل، شنبه ۱۰ بهمن ۱۳۹۴، ساعت ۲۲:۱۹
بجای //:ssh و //:git میشود از //:https استفاده کرد. یعنی بجای
بنویسید:
پشتیبانی رسمی از ssh در آپدیت دوم VS 2015 ارائه خواهد شد.
ssh://username@mygitserver.com/path/myrepo.git
https://username@mygitserver.com/path/myrepo.git
۸ سال و ۸ ماه قبل، یکشنبه ۴ بهمن ۱۳۹۴، ساعت ۱۵:۵۳
«a task was canceled» صرفا مرتبط هست به زنده نگه داشتن app pool برنامه؛ در زمانیکه سایت بازدید کنندهای ندارد. نظرات بحث را از ابتدا دنبال کنید؛ در مورد سرویس ping و امثال آن بحث شده.
۸ سال و ۸ ماه قبل، جمعه ۲ بهمن ۱۳۹۴، ساعت ۲۳:۲۳
یک نکته
اگر مثال زیر را برای تبدیل تاریخ شمسی 1393/02/31 یا 1393/04/31، به کمک متد DateTime.ParseExact اجرا کنید، با استثنایی متوقف خواهید شد:
علت اینجا است که persianCulture.Calendar به GregorianCalendar تنظیم شدهاست (از ابتدا و به اشتباه) و قابل تغییر نیست (مگر با Reflection). راه حل جایگزین، چیزی شبیه به این خواهد بود:
اگر مثال زیر را برای تبدیل تاریخ شمسی 1393/02/31 یا 1393/04/31، به کمک متد DateTime.ParseExact اجرا کنید، با استثنایی متوقف خواهید شد:
var persianCulture = new CultureInfo("fa-IR"); var persianDateTime = DateTime.ParseExact("31/02/1393", "dd/MM/yyyy", persianCulture);
using System; using System.Globalization; using System.Linq; public static DateTime PersianDateToGregorianDate(string pDate) { var dateParts = pDate.Split(new[] { '/' }).Select(d => int.Parse(d)).ToArray(); var hour = 0; var min = 0; var seconds = 0; return new DateTime(dateParts[0], dateParts[1], dateParts[2], hour, min, seconds, new PersianCalendar()); }
۸ سال و ۸ ماه قبل، یکشنبه ۲۷ دی ۱۳۹۴، ساعت ۰۰:۲۹
برای عمومیتر کردن پیاده سازی ICommand یک چنین کلاسی را میتوان تدارک دید:
و بعد برای استفادهی از آن، به صورت یک خاصیت عمومی در سطح ViewModel تعریف میشود:
سپس وهله سازی آن در سازندهی کلاس:
و بعد برای پیاده سازی متد execute آن:
using System; using System.Windows.Input; namespace Common.Mvvm { public class DelegateCommand<T> : ICommand { readonly Func<T, bool> _canExecute; readonly Action<T> _executeAction; public DelegateCommand(Action<T> executeAction, Func<T, bool> canExecute = null) { if (executeAction == null) throw new ArgumentNullException("executeAction"); _executeAction = executeAction; _canExecute = canExecute; } public event EventHandler CanExecuteChanged { add { if (_canExecute != null) CommandManager.RequerySuggested += value; } remove { if (_canExecute != null) CommandManager.RequerySuggested -= value; } } public bool CanExecute(object parameter) { return _canExecute == null || _canExecute((T)parameter); } public void Execute(object parameter) { _executeAction((T)parameter); } } }
public DelegateCommand<object> DoCopyAllLines { set; get; }
DoCopyAllLines = new DelegateCommand<object>(CopyAllLines, info => true);
private void CopyAllLines(object data) { // ... }
۸ سال و ۸ ماه قبل، سهشنبه ۲۲ دی ۱۳۹۴، ساعت ۱۹:۵۲
کتابخانهی « HtmlSanitizer » نیز برای تمیزسازی HTML دریافتی، با توجه به آزمونهای واحدی که دارد، بسیار مناسب است. همچنین مطلب «افزودن هدرهای Content Security Policy به برنامههای ASP.NET» را هم مدنظر داشته باشید.
۸ سال و ۸ ماه قبل، یکشنبه ۲۰ دی ۱۳۹۴، ساعت ۲۰:۴۱
- در کل در حالت POST به سرور، هر فیلدی که در فرم وجود داشته باشد (چه مخفی یا خیر) اطلاعات آن به سمت سرور ارسال میشود.
- اطلاعات View State هم در وب فرمها با هر post back به سمت سرور ارسال میشود (یک فیلد مخفی در فرم صفحه است و با هر POST ایی به سمت سرور ارسال میشود).
- در MVC اگر return model داشته باشید؛ بله. در غیر اینصورت اطلاعاتی به سمت کلاینت ارسال نمیشود.
- اطلاعات View State هم در وب فرمها با هر post back به سمت سرور ارسال میشود (یک فیلد مخفی در فرم صفحه است و با هر POST ایی به سمت سرور ارسال میشود).
- در MVC اگر return model داشته باشید؛ بله. در غیر اینصورت اطلاعاتی به سمت کلاینت ارسال نمیشود.
۸ سال و ۹ ماه قبل، شنبه ۱۹ دی ۱۳۹۴، ساعت ۱۵:۰۵
به jQuery 2.2 پشتیبانی از Symbolها اضافه شدهاست. به این معنا که اکنون میتوان از حلقههای for of بر روی المانهای آن استفاده کرد:
for (element of $elements) { console.log(element); }