نظرات مطالب
معرفی افزونه CAT.NET
من این مشکل را با VS2008 خودم نداشتم. شاید با یکی از افزونه‌هایی که نصب کردید تداخل دارد. اگر به این صورت بهتر است از کنترل پنل آن‌را کلا uninstall کنید.
قبل از uninstall کردن، یک بک آپ بگیرید از فایل‌هایی که نصب کرده. چون از طریق خط فرمان هم همانطور که عرض کردم کار می‌کند. خروجی html هم در کنار xsl ذکر شده می‌دهد که بسیار جالب و شکیل است. به این صورت با آن کار کنید تا با IDE شما تداخل نداشته باشد و مشکل درست نکند.
نظرات مطالب
آغاز کار با الکترون
سلام؛ با تشکر از آموزش. دو تا سوال داشتم:
۱. من می‌خواهم به جای textarea از یک div contenteditable استفاده کنم. ولی مشکل این جاست که نمی‌دانم چگونه باید فایل را درون یک div contenteditable باز کنم. (یعنی باید هر خط رو درون یک div بریزم و برای این کار نمی‌دونم چه جورری با جاوا اسکریپت تعداد خطوط رو بدست بیاورم و هر خط رو درون یک div بریزم)
۲. نمی‌دونم چطوری به جاوا اسکریپت بگم که برو به تعداد خطوط فایل، در اچ تی ام ال div ایجاد کن. (وقتی که ما یک div رو contenteditable  بکنیم، با هر بار enter زدن یک div جدید میسازه. حالا من نمی‌دونم اول کار که فقط یک div داریم چجوری به JS بگم که برو به تعداد خطوط فایل div بساز و هر خط رو درون یک div قرار بده.)
مثلا ویرایشگر atom و VSCode از div استفاده میکنه، ولی مشکل من همین دو تای بالایی هستش. لطفا راهنمایی کنید.
<div id=divEditor >
     <div id=editor contenteditable=true spellcheck=true >   
تعداد div زیری با هر بار enter کردن افزایش می‌یابد. پس من برای ریختن فایل درون همچین ساختاری چه کاری باید بکنم (هر خط در یک div)
            <div></div>         
      </div>   
</div>
ipcRenderer.on("openFile", (event, arg) => {
    let content = fs.readFileSync(String(arg), "utf8");
    let txt = document.getElementById("editor"); 

    let lineNumberOfFile = countingLineOfFile(content);
    // تابع countingLineOfFile هم تعداد خطوط را به درستی بر می‌گرداند
    // باید اول به تعداد خطوط فایل div بسازم
    //  سپس هر خط درون یک div
    txt.innerHTML = content;
});
اشتراک‌ها
روش غیرفعال کردن موقتی ReSharper

اگر در حین کار با nuget و صدور فرمان update-package آن، nuget مدام هنگ می‌کند، مشکل از تداخل ReSharper با آن است. از طریق منوی Tools | Options | ReSharper می‌توان ReSharper را به صورت موقت غیرفعال کرد.

روش غیرفعال کردن موقتی ReSharper
نظرات مطالب
ASP.NET MVC #17

سلام؛ ممنون بابت پاسختون. این طوری به forgeryToken نگاه نکرده بودم.

در صفحه برای Delete و ثبت اطلاعات و یا حتی فیلترکردن اطلاعات و هرجا که کاربر اطلاعاتی وارد می‌کند از AntiForgeryToken استفاده کردم و حذف و ورود اطلاعات و فیلتر کلا در یک صفحه اما هرکدام در تگ Form مجزایی ارسال و دریافت می‌شود و در هر تگ Form یک ForgeryToken گذاشتم.

برای اونها چه کار کنم؟ اصلا کار بنده درست بوده؟ من هرکجا کاربر اطلاعاتی وارد کرده از Token استفاده کردم ولی مشکل اینجاست که با توجه به طراحی کل اونها نیازه که در یک صفحه باشه.

می تونم یک AntiForgeryToken کلی داشته باشم و با جاوا اسکریپت اون و بخونم و به Form.Serilaise() اضافه کنم. اما می‌خواستم راه بهینه اون و بپرسم.

نظرات مطالب
انجام کارهای زمانبندی شده در برنامه‌های ASP.NET توسط DNT Scheduler
سلام؛ من یه سیستم ماژولار بیس نوشتم که تمام اجزا اون جداست و بروی چهار چوب اصلی یا همون هسته سوار میشه و اجرا میشه .
یه ماژول دارم ارسال ایمیل‌های زمانبندی شده که همین کلاس شما رو قرار دادم و مستقل داره کار می‌کنه .
الان می‌خوام دو سه ماژول دیگه ایجاد کنم که کاری رو بر مبنای زمانبندی انجام میدن .
حالا مشکل اینجاست چطوری از این کلاس استفاده کنم که بتونه تداخل انجام تسک نداشته باشه ؟
اولین و بهترین حالتی که به ذهنم رسید سوار کردن این کلاس بروی هسته هست که بتونه کل تسک‌ها رو مدیرت کنه و این کار با قرار دادن کلاس "ScheduledTasksRegistry " در هسته و قرار دادن کلاس "ScheduledTaskTemplate " برای هر ماژول قابل اجراست .
اما مشکل اینجاست که فایل ScheduledTasksRegistry  کامپایل شده و نمی‌توان متد :
ScheduledTasksCoordinator.Current.AddScheduledTasks(
new Listener(),
new Sender()
);
را تغییر داد .
مجدد توی ذهنم overwrite کردن این متد امد ولی چطوری ؟ ایا امکانپدیر هست ؟
دقیقا من باید بتونم این قسمت رو runtime تغییر بدم و کلاس‌های دیگر رو اضافه کنم .
نظرات مطالب
هدایت درخواست فایل‌های استاتیک در ASP.NET MVC به یک کنترلر
با سلام؛ در سرورم فایل‌هایی برای دانلود دارم که عموم مراجعه کنندگان به سایت می‌تونن اون فایل‌ها رو دانلود کنند، فایل‌های عمومی از نسخه‌های آزمایشی نرم‌افزارهایی که به صورت معمول تولید میشه، طبعا به صورت پیش فرض آدرس فایل برای دانلود به صورت ثابت و به شکل http://example.com/trialversion/filename.ext هست، اما من نیاز به این دارم که در زمان درخواست کاربر برای دانلود فایل مسیر دانلود به صورت مجازی یا فیک باشه ولی به یک فایل اصلی مرتبط باشه و کاربر هم وقتی لینک رو می‌بینه در واقع به صورت یه لینک نامشخص ببینه مثلا : http://example.com/6te99ue-0990r/acs9899?dddd یه لینکی شبیه به این یا نزدیک به این .
ممنون میشم راهنماییم کنید که چه‌طور در mvc می‌تونم یه همچین چیزی داشته باشم .
نظرات مطالب
تاریخ شمسی با Extension Method برای DateTime
سلام
من از ASP.NET MVC5 استفاده میکنم.
می‌خواستم بدونم دقیقاً این کلاس رو باید در کجا قرار داد و چه تنظیماتی در global.asax انجام داد تا همه چی به صورت خودکار اجرا بشه.
ممنون میشم راهنمایی کنید.
نظرات مطالب
چگونگی گزارشگیری از Business Objects مانند List توسط StimulSoft
مشکل حل شد
مشکل از فایل گزارش بود. فایل گزارش رو در خود استادیو stimul باز کردم و در حالت preview قرار دادم و موقع کمپایل با خطا روبرو شد و متوجه شدم که مشکل از فایل mrt بود.
مطالب
پیاده سازی پروژه‌های React با TypeScript - قسمت چهارم - تعیین نوع هوک‌های useState و useRef
پس از بررسی روش تعیین نوع‌های خواص props در قسمت‌های قبل، اکنون نوبت به بررسی روش تعیین نوع‌های انواع React Hooks است. در این قسمت دو هوک پرکاربرد useState و useRef را بررسی می‌کنیم.


روش تعیین نوع useState Hook

برای این منظور در ابتدا فایل جدید src\components\Input.tsx را ایجاد کرده و به صورت زیر تکمیل می‌کنیم:
import React, { useState } from "react";

export const Input = () => {
  const [name, setName] = useState("");
  return <input value={name} onChange={(e) => setName(e.target.value)} />;
};
همچنین تعریف المان آن‌را نیز به فایل src\App.tsx جهت نمایش </ Input> با ذکر "import { Input } from "./components/Input، انجام می‌دهیم.

پس از این تعاریف ... برنامه بدون مشکل کار می‌کند و کامپایل می‌شود. اکنون سؤال اینجا است که آیا تایپ‌اسکریپت در ایجا اصلا کاری را هم انجام می‌دهد؟ برای درک این موضوع، سطر useState را به صورت زیر تغییر می‌دهیم:
const [name, setName] = useState(0);
بلافاصله خطای زیر ظاهر می‌شود:

عنوان می‌کند که مقدار رشته‌ای e.target.value، به مقدار عددی name قابل انتساب نیست. به عبارتی TypeScript از قابلیت Type Inference خود در اینجا استفاده می‌کند. درست است که به ظاهر نوعی را برای useState و خروجی منتسب به آن تعیین نکرده‌ایم، اما بر اساس نوع مقدار پیش‌فرض آن، نوع name و setName به صورت خودکار مشخص می‌شوند و نیازی به ذکر صریح این نوع، نیست. برای مثال در حالت اول چون مقدار پیش‌فرض useState را یک رشته‌ی خالی معرفی کرده بودیم، نوع name نیز string درنظر گرفته شده بود. در حالت دوم بر اساس مقدار پیش‌فرض عددی useState، اینبار نوع name نیز یک number خواهد بود و دیگر نمی‌توان یک مقدار رشته‌ای را مانند e.target.value به آن انتساب داد. مزیت کار کردن با TypeScript در اینجا، مشاهده‌ی آنی خطای یک چنین استفاده‌ها و انتساب‌های نادرستی است.

مفهوم Type Inference را در تصاویر زیر بهتر می‌توان مشاهده کرد. اشاره‌گر ماوس را به تعریف useState نزدیک کنید. در توضیحاتی که ظاهر می‌شود، بر اساس نوع مقدار پیش‌فرض آن، نوع آرگومان جنریک متد useState نیز به صورت خودکار تغییر می‌کند:



و نکته‌ی مهم اینجا است که نیازی به ذکر صریح این نوع جنریک، مانند مثال زیر نیست:
const [name, setName] = useState<string>("");
و سطر فوق با سطر زیر که بیانگر Type Inference است، دقیقا یکی است:
const [name, setName] = useState("");

سؤال: اگر مقدار اولیه‌ی useState را null تعیین کردیم و یا اصلا تعریف نکردیم و undefined بود، چطور؟
در یک چنین حالتی که نوع دقیق state، از طریق مقدار اولیه‌ی آن قابل استنتاج نیست، نیاز هست همانند تصاویر فوق، تعریف جنریک useState را به نحو صریحی ذکر کرده و آن‌را با union types تکمیل کنیم:
const [name, setName] = useState<string | null>(null);
به این ترتیب عنوان کرده‌ایم که نوع name در اینجا می‌تواند رشته‌ای و یا نال باشد.


روش تعیین نوع useRef Hook

در ادامه می‌خواهیم نحوه‌ی تعیین نوع DOM Elements را در React بررسی کنیم. با استفاده از useRef می‌توان به ارجاعی از یک DOM Element دسترسی یافت.
import React, { useRef, useState } from "react";

export const Input = () => {
  const [name, setName] = useState("");
  const inputRef = useRef(null);

  if (inputRef && inputRef.current) {
    console.log("ref", inputRef.current.value);
  }
  return (
    <input
      ref={inputRef}
      value={name}
      onChange={(e) => setName(e.target.value)}
    />
  );
};
برای اینکار ابتدا useRef را با یک مقدار اولیه‌ی null، توسط ویژگی ref، به یک DOM Element خاص متصل می‌کنیم. تا اینجا برنامه بدون مشکل کار می‌کند؛ اما زمانیکه خواستیم برای مثال به inputRef.current.value دسترسی پیدا کنیم، دیگر تعریف ساده‌ی useRef(null) پاسخگو نبوده و خطای زیر گزارش می‌شود:


عنوان می‌کند نوعی که inputRef.current دارد، نال است و نال به همراه خاصیت value نیست. برای اینکه نوع inputRef را بهتر بتوانیم بررسی کنیم، دقیقا بر روی آن کلیک راست کرده و گزینه‌ی Go to Type Definition را انتخاب کنید. بلافاصله به تعریف زیر هدایت خواهیم شد:
interface MutableRefObject<T> {
   current: T;
}
inputRef، از نوع MutableRefObject جنریک است که تنها دارای یک خاصیت current است. نوع T آن هم در اینجا با توجه به مقدار اولیه‌ی آن، null درنظر گرفته شده‌است. به همین جهت هرچند می‌دانیم inputRef.current به المان input صفحه اشاره می‌کند، اما نمی‌توانیم به خواص و متدهای آن دسترسی پیدا کنیم.
برای رفع این مشکل فقط کافی است نوع المان مدنظر را صریحا به عنوان آرگومان جنریک useRef معرفی کنیم:
const inputRef = useRef<HTMLInputElement>(null);
نحوه‌ی تشخیص این نوع هم ساده‌است. فقط کافی است اشاره‌گر ماوس را بر روی المانی خاص قرار دهید. بلافاصله نوع آن مشخص می‌شود:



فعال بودن Strict Null Checking در پروژه‌های TypeScript ای React

نکات مطلب «نوع‌های نال نپذیر در TypeScript» به صورت پیش‌فرض در پروژه‌های تایپ اسکریپتی React هم فعال هستند؛ چون پرچم strict واقع در فایل tsconfig.json پروژه، به صورت پیش‌فرض به true تنظیم شده‌است و این پرچم، Strict Null Checking را نیز شامل می‌شود. برای آزمایش فعال بودن آن، کدهای فوق را به صورت زیر تغییر دهید تا صرفا if آن حذف شود:
//if (inputRef && inputRef.current) {
  console.log("ref", inputRef.current.value);
//}
بلافاصله خطای امکان نال بودن inputRef.current در اولین بار رندر کامپوننت جاری را دریافت خواهید کرد:

که برای رفع آن، همانند قبل باید ذکر if بررسی نال بودن inputRef و خاصیت current آن‌را اضافه کرد؛ تا دیگر در زمان اجرای برنامه، با شانس نال بودن یکی از این‌دو مواجه نشویم و به کیفیت بالاتری در برنامه‌ی خود برسیم.
روش بررسی if (inputRef && inputRef.current) معادل ساده‌تری را نیز در TypeScript 3.7 به بعد دارد که به Optional Chaining معروف است؛ به صورت زیر:
console.log("ref", inputRef?.current?.value);
در این حالت دیگر نیازی به ذکر if یاد شده نیست و وجود .? به معنای ادامه‌ی این زنجیره، در صورت نال نبودن قطعه‌ی قبلی است.
بازخوردهای پروژه‌ها
چگونگی قرار دادن عکس به صورت Watermark(پس زمینه گزارش)
با عرض سلام و خسته نباشید، ببخشید استاد من برای ساختن گزارشات نرم افزار خودم از کتابخانه PdfReport استفاده کردم . حال می‌خواهم در یکی از گزارشاتم که به صورت یک فاکتور هست آرم شرکت را به صورت پس زمینه قرار دهم ولی قسمت Watermark رو مطالعه کردم دیدم فقط متن می‌تونم به صورت پس زمینه قرار دهم ممنون میشم راهنمایی کنید که برای این کار دقیقاً چه تنظیماتی باید انجام دهم. ممنون