ممنون از پاسخ شما .
تو همشون break point گذاشتم و همشون اجرا میشن و ثبت میشن.
نمیدونم مشکل از کجاست!
using System.Collections; using System.Web; using System.Web.UI; using StructureMap; namespace DI05.Core { /// <summary> /// تسهیل در کار تزریق خودکار وابستگیها در سطح فرمها و یوزرکنترلها /// </summary> public class StructureMapModule : IHttpModule { public void Dispose() { } public void Init(HttpApplication app) { app.PreRequestHandlerExecute += (sender, e) => { var page = HttpContext.Current.Handler as Page; // The Page handler if (page == null) return; WireUpThePage(page); WireUpAllUserControls(page); }; } private static void WireUpAllUserControls(Page page) { // در اینجا هم کار سیم کشی یوزر کنترلها انجام میشود page.InitComplete += (initSender, evt) => { var thisPage = (Page)initSender; foreach (Control ctrl in getControlTree(thisPage)) { // فقط یوزر کنترلها بررسی شدند // اگر نیاز است سایر کنترلهای قرار گرفته روی فرم هم بررسی شوند شرط را حذف کنید if (ctrl is UserControl) { ObjectFactory.BuildUp(ctrl); } } }; } private static void WireUpThePage(Page page) { ObjectFactory.BuildUp(page); // برقراری خودکار سیم کشیها در سطح صفحات } private static IEnumerable getControlTree(Control root) { foreach (Control child in root.Controls) { yield return child; foreach (Control ctrl in getControlTree(child)) { yield return ctrl; } } } } }
<?xml version="1.0"?> <configuration> <system.web> <compilation debug="true" targetFramework="4.0" /> <httpModules> <add name="StructureMapModule" type="DI05.Core.StructureMapModule"/> </httpModules> </system.web> <system.webServer> <modules runAllManagedModulesForAllRequests="true"> <add name="StructureMapModule" type="DI05.Core.StructureMapModule"/> </modules> <validation validateIntegratedModeConfiguration="false" /> </system.webServer> </configuration>
namespace DI05.Services { public interface IUsersService { string GetUserEmail(int id); } } namespace DI05.Services { public class UsersService: IUsersService { public string GetUserEmail(int id) { //فقط جهت بررسی تزریق وابستگیها return "test@test.com"; } } }
using System; using StructureMap; using DI05.Services; namespace DI05 { public class Global : System.Web.HttpApplication { private static void initStructureMap() { ObjectFactory.Initialize(x => { x.For<IUsersService>().Use<UsersService>(); x.SetAllProperties(y => { y.OfType<IUsersService>(); }); }); } protected void Application_Start(object sender, EventArgs e) { initStructureMap(); } void Application_EndRequest(object sender, EventArgs e) { ObjectFactory.ReleaseAndDisposeAllHttpScopedObjects(); } } }
using System; using DI05.Services; namespace DI05 { public partial class Default : System.Web.UI.Page { public IUsersService UsersService { set; get; } protected void Page_Load(object sender, EventArgs e) { lblEmail1.Text = string.Format("From Default Page: {0}", UsersService.GetUserEmail(1)); } } }
PM> Install-Package structuremap.web
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Diagnostics;
namespace testWinForms87
{
class CTestClipboard
{
[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr GetOpenClipboardWindow();
[DllImport("user32.dll", SetLastError = true)]
private static extern uint GetWindowThreadProcessId(
IntPtr hWnd,
out uint lpdwProcessId);
public static void TrySetData()
{
try
{
Clipboard.SetData(DataFormats.Text, "وحید");
}
catch
{
IntPtr hwnd = GetOpenClipboardWindow();
if (hwnd == IntPtr.Zero) return;
uint pid;
GetWindowThreadProcessId(hwnd, out pid);
MessageBox.Show(string.Format("clipboard is locked by: {0}",
Process.GetProcessById((int)pid).Modules[0].FileName));
}
}
}
}
public static string FixGmailDots(string email) { if (string.IsNullOrWhiteSpace(email)) return string.Empty; email = email.ToLowerInvariant().Trim(); var emailParts = email.Split('@'); var name = emailParts[0].Replace(".", string.Empty).Replace("+", string.Empty); var emailDomain = emailParts[1]; string[] domainsAllowedDots = { "gmail.com", "facebook.com" }; var isFromDomainsAllowedDots = domainsAllowedDots.Any(domain => emailDomain.Equals(domain)); return !isFromDomainsAllowedDots ? email : string.Format("{0}@{1}", name, emailDomain); }
friendlyName = friendlyName.ApplyCorrectYeKe().RemoveDiacritics().CleanUnderLines().RemovePunctuation(); var trimmedFriendlyName = friendlyName.Trim().Replace(" ", "");
public static string CleanUnderLines(string text) { if (string.IsNullOrWhiteSpace(text)) return string.Empty; const char chr1600 = (char)1600; //ـ=1600 const char chr8204 = (char)8204; //=8204 return text.Replace(chr1600.ToString(CultureInfo.InvariantCulture), "") .Replace(chr8204.ToString(CultureInfo.InvariantCulture), ""); }
public static string RemovePunctuation(string text) { return string.IsNullOrWhiteSpace(text) ? string.Empty : new string(text.Where(c => !char.IsPunctuation(c)).ToArray()); }
-- @pNumber پارامتر ورودی IF LEN(ISNULL(@pNumber, '')) = 0 RETURN NULL IF (PATINDEX('%[^0-9.-]%', @pNumber) > 0) OR (LEN(@pNumber) -LEN(REPLACE(@pNumber, '-', '')) > 1) OR (LEN(@pNumber) -LEN(REPLACE(@pNumber, '.', '')) > 1) OR (CHARINDEX('-', @pNumber) > 1) RETURN 'خطا' IF PATINDEX('%[^0]%', @pNumber) = 0 RETURN 'صفر' IF (CHARINDEX('.', @pNumber) = 1) SET @pNumber='0'+@pNumber DECLARE @Negative AS VARCHAR(5) = ''; IF LEFT(@pNumber, 1) = '-' BEGIN SET @pNumber = SUBSTRING(@pNumber, 2, 100) SET @Negative = 'منفی ' END
فکر کنم اینجا به علت وجود کاراکترهای فارسی و انگلیسی کد کمی بهم ریخته نمایش داده میشود.
DECLARE @NumberTitle TABLE (val INT,Title NVARCHAR(100)); INSERT INTO @NumberTitle (val,Title) VALUES(0, ''),(1, 'یک') ,(2, 'دو'),(3, 'سه'),(4, 'چهار') ,(5, 'پنج'),(6, 'شش'),(7, 'هفت'),(8, 'هشت') ,(9, 'نه'),(10, 'ده'),(11, 'یازده'),(12, 'دوازده') ,(13, 'سیزده'),(14, 'چهارده'),(15, 'پانزده'),(16, 'شانزده') ,(17, 'هفده'),(18, 'هجده'),(19, 'نوزده'),(20, 'بیست') ,(30, 'سی'),(40, 'چهل'),(50, 'پنجاه'),(60, 'شصت') ,(70, 'هفتاد'),(80, 'هشتاد'),(90, 'نود'),(100, 'صد') ,(200, 'دویست'),(300, 'سیصد'),(400, 'چهارصد'),(500, 'پانصد') ,(600, 'ششصد'),(700, 'هفتصد'),(800, 'هشتصد'),(900, 'نهصد') DECLARE @PositionTitle TABLE (id INT,Title NVARCHAR(100)); INSERT INTO @PositionTitle (id,title) VALUES (1, ''),(2, 'هزار'),(3, 'میلیون'),(4, 'میلیارد'),(5, 'تریلیون') ,(6, 'کوادریلیون'),(7, 'کوینتیلیون'),(8, 'سیکستیلون'),(9, 'سپتیلیون') ,(10, 'اکتیلیون'),(11, 'نونیلیون'),(12, 'دسیلیون') ,(13, 'آندسیلیون'),(14, 'دودسیلیون'),(15, 'تریدسیلیون') ,(16, 'کواتردسیلیون'),(17, 'کویندسیلیون'),(18, 'سیکسدسیلیون') ,(19, 'سپتندسیلیون'),(20, 'اکتودسیلیوم'),(21, 'نومدسیلیون') DECLARE @DecimalTitle TABLE (id INT,Title NVARCHAR(100)); INSERT INTO @DecimalTitle (id,Title) VALUES( 1 ,'دهم' ),(2 , 'صدم'),(3 , 'هزارم') ,(4 , 'ده-هزارم'),(5 , 'صد-هزارم'),(6 , 'میلیون ام') ,(7 , 'ده-میلیون ام'),(8 , 'صد-میلیون ام'),(9 , 'میلیاردم') ,(10 , 'ده-میلیاردم')
اما اگر عدد ورودی 20.0 باشد همچنان صفر بی ارزش بعداز ممیز را خواهیم داشت. برای رفع این مشکل کافی است که کاراکتری غیر از صفر را به اول رشته اعشاری اضافه کنیم. من از علامت '?' استفاده کردم. پس به علت اضافه کردن کاراکتر، استارت را از 2 شروع کرده و دیگر نیازی به -1 نخواهیم داشت. با کد زیر قسمت صحیح و اعشاری را بدست میآوریم:SUBSTRING(@DecimalNumber,1, len(@DecimalNumber )-PATINDEX('%[^0]%', REVERSE (@DecimalNumber))-1)
DECLARE @IntegerNumber NVARCHAR(100), @DecimalNumber NVARCHAR(100), @PointPosition INT =case CHARINDEX('.', @pNumber) WHEN 0 THEN LEN(@pNumber)+1 ELSE CHARINDEX('.', @pNumber) END SET @IntegerNumber= LEFT(@pNumber, @PointPosition - 1) SET @DecimalNumber= '?' + SUBSTRING(@pNumber, @PointPosition + 1, LEN(@pNumber)) SET @DecimalNumber= SUBSTRING(@DecimalNumber,2, len(@DecimalNumber )-PATINDEX('%[^0]%', REVERSE (@DecimalNumber))) SET @pNumber= @IntegerNumber
DECLARE @Number AS INT DECLARE @MyNumbers TABLE (id INT IDENTITY(1, 1), Val1 INT, Val2 INT, Val3 INT) WHILE (@pNumber) <> '0' BEGIN SET @number = CAST(SUBSTRING(@pNumber, LEN(@pNumber) -2, 3)AS INT) INSERT INTO @MyNumbers SELECT (@Number % 1000) -(@Number % 100), CASE WHEN @Number % 100 BETWEEN 10 AND 19 THEN @Number % 100 ELSE (@Number % 100) -(@Number % 10) END, CASE WHEN @Number % 100 BETWEEN 10 AND 19 THEN 0 ELSE @Number % 10 END IF LEN(@pNumber) > 2 SET @pNumber = LEFT(@pNumber, LEN(@pNumber) -3) ELSE SET @pNumber = '0' END
DECLARE @Str AS NVARCHAR(2000) = ''; SELECT @Str += REPLACE(REPLACE(LTRIM(RTRIM(nt1.Title + ' ' + nt2.Title + ' ' + nt3.title)),' ',' '),' ', ' و ') + ' ' + pt.title + ' و ' FROM @MyNumbers AS mn INNER JOIN @PositionTitle pt ON pt.id = mn.id INNER JOIN @NumberTitle nt1 ON nt1.val = mn.Val1 INNER JOIN @NumberTitle nt2 ON nt2.val = mn.Val2 INNER JOIN @NumberTitle nt3 ON nt3.val = mn.Val3 WHERE (nt1.val + nt2.val + nt3.val > 0) ORDER BY pt.id DESC
IF @IntegerNumber='0' SET @Str=CASE WHEN PATINDEX('%[^0]%', @DecimalNumber) > 0 THEN @Negative ELSE '' END + 'صفر' ELSE SET @Str = @Negative + LEFT (@Str, LEN(@Str) -2) DECLARE @PTitle NVARCHAR(100)=ISNULL((SELECT Title FROM @DecimalTitle WHERE id=LEN(@DecimalNumber)),'') SET @Str += ISNULL(' ممیز '+[dbo].[fnNumberToWord_Persian](@DecimalNumber) +' '+@PTitle,'') RETURN @str
public class HandleConcurrencyExceptionAttribute : FilterAttribute, IExceptionFilter { private PropertyMatchingMode _propertyMatchingMode; /// <summary> /// This defines when the concurrencyexception happens, /// </summary> public enum PropertyMatchingMode { /// <summary> /// Uses only the field names in the model to check against the entity. This option is best when you are using /// View Models with limited fields as opposed to an entity that has many fields. The ViewModel (or model) field names will /// be used to check current posted values vs. db values on the entity itself. /// </summary> UseViewModelNamesToCheckEntity = 0, /// <summary> /// Use any non-matching value fields on the entity (except timestamp fields) to add errors to the ModelState. /// </summary> UseEntityFieldsOnly = 1, /// <summary> /// Tells the filter to not attempt to add field differences to the model state. /// This means the end user will not see the specifics of which fields caused issues /// </summary> DontDisplayFieldClashes = 2 } public HandleConcurrencyExceptionAttribute() { _propertyMatchingMode = PropertyMatchingMode.UseViewModelNamesToCheckEntity; } public HandleConcurrencyExceptionAttribute(PropertyMatchingMode propertyMatchingMode) { _propertyMatchingMode = propertyMatchingMode; } /// <summary> /// The main method, called by the mvc runtime when an exception has occured. /// This must be added as a global filter, or as an attribute on a class or action method. /// </summary> /// <param name="filterContext"></param> public void OnException(ExceptionContext filterContext) { if (!filterContext.ExceptionHandled && filterContext.Exception is DbUpdateConcurrencyException) { //Get original and current entity values DbUpdateConcurrencyException ex = (DbUpdateConcurrencyException)filterContext.Exception; var entry = ex.Entries.Single(); //problems with ef4.1/4.2 here because of context/model in different projects. //var databaseValues = entry.CurrentValues.Clone().ToObject(); //var clientValues = entry.Entity; //So - if using EF 4.1/4.2 you may use this workaround var clientValues = entry.CurrentValues.Clone().ToObject(); entry.Reload(); var databaseValues = entry.CurrentValues.ToObject(); List<string> propertyNames; filterContext.Controller.ViewData.ModelState.AddModelError(string.Empty, "The record you attempted to edit " + "was modified by another user after you got the original value. The " + "edit operation was canceled and the current values in the database " + "have been displayed. If you still want to edit this record, click " + "the Save button again to cause your changes to be the current saved values."); PropertyInfo[] entityFromDbProperties = databaseValues.GetType().GetProperties(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Instance); if (_propertyMatchingMode == PropertyMatchingMode.UseViewModelNamesToCheckEntity) { //We dont have access to the model here on an exception. Get the field names from modelstate: propertyNames = filterContext.Controller.ViewData.ModelState.Keys.ToList(); } else if (_propertyMatchingMode == PropertyMatchingMode.UseEntityFieldsOnly) { propertyNames = databaseValues.GetType().GetProperties(BindingFlags.Public).Select(o => o.Name).ToList(); } else { filterContext.ExceptionHandled = true; UpdateTimestampField(filterContext, entityFromDbProperties, databaseValues); filterContext.Result = new ViewResult() { ViewData = filterContext.Controller.ViewData }; return; } UpdateTimestampField(filterContext, entityFromDbProperties, databaseValues); //Get all public properties of the entity that have names matching those in our modelstate. foreach (var propertyInfo in entityFromDbProperties) { //If this value is not in the ModelState values, don't compare it as we don't want //to attempt to emit model errors for fields that don't exist. //Compare db value to the current value from the entity we posted. if (propertyNames.Contains(propertyInfo.Name)) { if (propertyInfo.GetValue(databaseValues, null) != propertyInfo.GetValue(clientValues, null)) { var currentValue = propertyInfo.GetValue(databaseValues, null); if (currentValue == null || string.IsNullOrEmpty(currentValue.ToString())) { currentValue = "Empty"; } filterContext.Controller.ViewData.ModelState.AddModelError(propertyInfo.Name, "Current value: " + currentValue); } } //TODO: hmm.... how can we only check values applicable to the model/modelstate rather than the entity we saved? //The problem here is we may only have a few fields used in the viewmodel, but many in the entity //so we could have a problem here with that. //object o = propertyInfo.GetValue(myObject, null); } filterContext.ExceptionHandled = true; filterContext.Result = new ViewResult() { ViewData = filterContext.Controller.ViewData }; } }
function isWasmSupported() { try { if (typeof WebAssembly === "object" && typeof WebAssembly.instantiate === "function") { const module = new WebAssembly.Module(Uint8Array.of(0x0, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00)); if (module instanceof WebAssembly.Module) return new WebAssembly.Instance(module) instanceof WebAssembly.Instance; } } catch (e) { } return false; } if(!isWasmSupported()) { alert("WebAssembly is not available in your browser. Please try using the latest version of Chrome, Firefox, Edge or Safari."); }
var allDigitEqual = new[]{"0000000000","1111111111","2222222222","3333333333","4444444444","5555555555","6666666666","7777777777","8888888888","9999999999"}; if (allDigitEqual.Contains(nationalCode)) return false;
if (nationalCode == "1111111111" || nationalCode == "0000000000" || nationalCode == "2222222222" || nationalCode == "3333333333" || nationalCode == "4444444444" || nationalCode == "5555555555" || nationalCode == "6666666666" || nationalCode == "7777777777" || nationalCode == "8888888888" || nationalCode == "9999999999") return false;
validateProperty = ({ name, value }) => { const userInputObject = { [name]: value }; const propertySchema = Joi.object({ [name]: this.schema[name] }); const { error } = propertySchema.validate(userInputObject, { abortEarly: true }); if (Object.keys(userInputObject)[0] === 'confirmation') { if (value !== this.state.data.password) return "گذرواژهها با هم تطابق ندارند" } return error ? error.details[0].message : null; }
confirmation: Joi.string() .min(5) .max(12)