اشتراکها
Along with NativeScript 3.4 we also released a new version of the nativescript-angular plugin with official support for Angular 5. The update includes support for Angular’s new AnimationBuilder APIs, as well as some iOS-specific startup time improvements. You can learn more about these changes in the nativescript-angular changelog.
نظرات اشتراکها
نگاهی به قابلیتهای بهبود یافتهی WebStorm 2019.1
Razor یک فناوری سمت سرور هست و قسمت مهمی از پردازش آن، وابستهاست به اطلاعاتی که برای مثال از یک اکشن متد دریافت میکند (و برای این منظور نیاز به دسترسی به کامپایلر #C را دارد). به همین جهت Rider پشتیبانی کاملی از آنرا ارائه میدهد. WebStorm دید سمت کلاینتی دارد و اگر خواستید فایلهای Razor را هم در آن به صورت HTML پردازش کنید، در قسمت Settings | Editor | File Types ، نیاز است cshtml.* را به صورت HTML معرفی کنید.
اشتراکها
Bootstrap RTL 3.3.1 RC2 منتشر شد
نظرات مطالب
Image Annotations
- اگر دقت کرده باشید در کدهای فوق این متدها استاتیک تعریف شدن، یعنی مراحل چرخه طول عمر یک صفحه به آنها اعمال نشده و اصلا جزئی از مباحث اعتبارسنجی صفحه جاری لحاظ نخواهند شد.
- در وب فرمها استفاده از وب متدها یک روش برای کار با jQuery Ajax است. روش دوم استفاده از Generic handlerها و فایلهای ashx است. در این موارد به علت استاتیک نبودن handlerهای تولیدی، میشود همه نوع اعتبارسنجی رو اعمال کرد اعم از روش Forms Authentication مثلا توسط context.Request.IsAuthenticated یا حتی روش منسوخ شده استفاده از سشنها برای اعتبارسنجی با پیاده سازی IRequiresSessionState.
- در مطلب فوق اصلا از MS Ajax استفاده نشده. اون هم جایگاه خودش رو در کاربردهای خاص خودش دارد.
- در وب فرمها استفاده از وب متدها یک روش برای کار با jQuery Ajax است. روش دوم استفاده از Generic handlerها و فایلهای ashx است. در این موارد به علت استاتیک نبودن handlerهای تولیدی، میشود همه نوع اعتبارسنجی رو اعمال کرد اعم از روش Forms Authentication مثلا توسط context.Request.IsAuthenticated یا حتی روش منسوخ شده استفاده از سشنها برای اعتبارسنجی با پیاده سازی IRequiresSessionState.
- در مطلب فوق اصلا از MS Ajax استفاده نشده. اون هم جایگاه خودش رو در کاربردهای خاص خودش دارد.
- بررسی ویرویس Stuxnet | www.idevcenter.com
- تایپ متن فارسی در Gmail | googlepersianblog.blogspot.com
- خصوصیات جدید در ASP.NET 4.5 - خصوصیت HTML Editor Smart Tasks and Event Handler Generation | mojtabasahraei.blogfa.com
- دیتابیس رنگی | www.dotnetdev.info
- شما مرغابی هستید یا عقاب؟ | hrnews.blogfa.com
- نقد فیلم "one flew over the cuckoos nest - دیوانه از قفس پرید( پرواز بر فراز آشیانه فاخته)" | filmhafteh.blogfa.com
- Addressing Visual Studio performance | blogs.msdn.com
- BUILD conference–day 3 | lostechies.com
- BUILD: WinRT, Silverlight, WPF, XAML | www.japf.fr
- C# and Visual Basic on the WinRT API | www.infoq.com
- Multi Monitor in VS.NET 2010 & SQL Server 2011 | www.nikamooz.com
- My List of Must-See Build 2011 Videos | 10rem.net
- New CSS editor features in Visual Studio 11 Developer Preview | blogs.msdn.com
- New Tools and New Content - ASP.NET, Visual Studio 11 Web and .NET 4.5 Developer Preview (with commentary) | www.hanselman.com
- Prototype xUnit.net Visual Studio 11 Unit Testing Plugin | bradwilson.typepad.com
- RIA Services updates for //build | feeds.jeffhandley.com
- Using WinRT from .NET | ermau.com
- Windows 8 and WinRT: Links, News and Resources | ajlopez.wordpress.com
- Windows 8 Replaces the Win32 API | www.infoq.com
- Windows 8: What you Need to Know | csharperimage.jeremylikness.com
- WinRT: An Object Orientated Replacement for Win32 | www.infoq.com
یک مثال ساده برای شرح مساله
در اینجا مدل User، کنترلری به نام Home و View متناظر با آن را ملاحظه میکنید:
نکتهای که در اینجا مدنظر است، سطر زیر میباشد:
پیش از اینکه برنامه را اجرا کنید، به نظر شما پس از postback به سرور، چه اطلاعاتی در Html.EditorFor تعریف شده در View برنامه نمایش داده خواهد شد؟
احتمالا عنوان میکنید که خوب ... همان مقدار علامت سؤال انتساب داده شده. اما ... اینچنین نیست! دقیقا همان مقداری که در حین Postback به سرور ارسال شده، نمایش داده میشود.
این مورد نکتهای است که عدم آشنایی با آن ممکن است چندین ساعت را به دیباگ یک برنامه اختصاص دهد، بدون اینکه نتیجه مفیدی حاصل شود.
مطابق نظر طراحان اصلی ASP.NET MVC، اینکار و این رفتار، دقیقا به همین نحو صحیح است و باگ نیست.
«فرض کنید در فیلدی عددی، کاربر عبارت «تست» را وارد کرده است. نیاز است در خطای اعتبار سنجی پس از Postback به او عنوان کنیم، لطفا بجای «تست»، عدد وارد کنید. چون خاصیت متناظر قید شده در مدل، عددی است، مقدار «تست» وارد شده را از دست خواهیم داد. به همین جهت همان مقدار اولیه وارد شده را در HTML Helpers پس از Postback حفظ میکنیم.»
راه حلهای ممکن، برای به روز رسانی وضعیت مدل پس از Postback
الف) استفاده از متد ModelState.Clear
این متد کلیه دادههای موجود در ModelState را منجمله خطاهای حاصل از اعتبارسنجی، حذف میکند. در این حالت مطابق مثال فوق پس از Postback، مقدار علامت سؤال نسبت داده شده به خاصیت ایمیل، نمایش داده خواهد شد.
ب) استفاده از متد ModelState.Remove
این حالت نیز مانند حالت الف است، با این تفاوت که اطلاعات اعتبار سنجی و سایر موارد مرتبط را حذف نمیکند.
ج) عدم استفاده از HTML Helpers
این مورد را فقط با متدهای کمکی For دار، مانند Html.EditorFor مشاهده خواهید کرد. اگر نحوه تعریف را به شکل زیر تغییر دهیم، نیازی به استفاده از متد ModelState.Remove نخواهد بود. البته، مزیتهای استفاده از HTML Helpers دارای متدهای For دار را که Strongly typed هستند، از دست میدهیم.
در اینجا مدل User، کنترلری به نام Home و View متناظر با آن را ملاحظه میکنید:
namespace ModelStateTest.Models { public class User { public string Email { set; get; } } }
using System.Web.Mvc; using ModelStateTest.Models; namespace ModelStateTest.Controllers { public class HomeController : Controller { public ActionResult Index() { return View(); } [HttpPost] public ActionResult Index(User model) { model.Email = "?"; return View(model); } } }
@model ModelStateTest.Models.User @{ ViewBag.Title = "Index"; } <h2>Index</h2> @using (Html.BeginForm()) { @Html.ValidationSummary(true) <fieldset> <legend>User</legend> <div class="editor-label"> @Html.LabelFor(model => model.Email) </div> <div class="editor-field"> @Html.EditorFor(model => model.Email) @Html.ValidationMessageFor(model => model.Email) </div> <p> <input type="submit" value="Create" /> </p> </fieldset> }
model.Email = "?";
احتمالا عنوان میکنید که خوب ... همان مقدار علامت سؤال انتساب داده شده. اما ... اینچنین نیست! دقیقا همان مقداری که در حین Postback به سرور ارسال شده، نمایش داده میشود.
این مورد نکتهای است که عدم آشنایی با آن ممکن است چندین ساعت را به دیباگ یک برنامه اختصاص دهد، بدون اینکه نتیجه مفیدی حاصل شود.
مطابق نظر طراحان اصلی ASP.NET MVC، اینکار و این رفتار، دقیقا به همین نحو صحیح است و باگ نیست.
«فرض کنید در فیلدی عددی، کاربر عبارت «تست» را وارد کرده است. نیاز است در خطای اعتبار سنجی پس از Postback به او عنوان کنیم، لطفا بجای «تست»، عدد وارد کنید. چون خاصیت متناظر قید شده در مدل، عددی است، مقدار «تست» وارد شده را از دست خواهیم داد. به همین جهت همان مقدار اولیه وارد شده را در HTML Helpers پس از Postback حفظ میکنیم.»
راه حلهای ممکن، برای به روز رسانی وضعیت مدل پس از Postback
الف) استفاده از متد ModelState.Clear
این متد کلیه دادههای موجود در ModelState را منجمله خطاهای حاصل از اعتبارسنجی، حذف میکند. در این حالت مطابق مثال فوق پس از Postback، مقدار علامت سؤال نسبت داده شده به خاصیت ایمیل، نمایش داده خواهد شد.
ب) استفاده از متد ModelState.Remove
this.ModelState.Remove("Email");
ج) عدم استفاده از HTML Helpers
این مورد را فقط با متدهای کمکی For دار، مانند Html.EditorFor مشاهده خواهید کرد. اگر نحوه تعریف را به شکل زیر تغییر دهیم، نیازی به استفاده از متد ModelState.Remove نخواهد بود. البته، مزیتهای استفاده از HTML Helpers دارای متدهای For دار را که Strongly typed هستند، از دست میدهیم.
<input type="text" name="Email" id="Email" value="@Model.Email" />
These are the customer-reported issues addressed in 15.7.3:
- VS2017 compiler creates broken debug build using Qt framework and generates 'Invalid address specified to RtlValidateHeap' error.
- Incorrect code generation for matrix multiplication.
- VS 2017 Update 7: Git History Codelens only showing entries for the past 6 months.
- UWP projects reference multiple NetStandard 2.0 dlls after 15.7.1 upgrade.
- Building C++ code in VS 15.7 with /std:c++17 breaks binary compatibility for std::_Ptr_move_cat.
- Visual Studio 15.7 stuck when opening XAML files.
- CMake configuration fails and generates message "C++ IntelliSense information may be out of date, generate the CMake cache to refresh".
- Unable to start second process for debugging.
- After update to Visual Studio 15.7.1, some test programs fail in start-up due to reading access violation.
- Missing compiler required member 'Microsoft.CSharp.RuntimeBinder.Binder.Convert'.
- Build fails after 15.7.0 update on older project using .NET 3.5 .
- Coloring, typing, tooltips and IntelliSense slow in F# in VS2017 editor.
- F# editing experience takes up to a minute for tooltips and dropdowns to display.
- Certain class member variable value are incorrectly read as zero.
- Attempt to open XAML file for the first time causes VS to sit with the "Opening the file ..." message for about 10 minutes before XAML file opens.
- Visual Studio slows down and freezes, creating work loss.
- The target "GetBuiltProjectOutputRecursive" does not exist in the project.
- Internal error with lambda C++17 after 15.7.1 update.
- UWP App is slow to return a stopped state in IDE.
- MSVC auto-vectorization produces incorrect code or incorrect results.
- Visual Studio closed debug a new instance project1, when a new debug new instance project2 has started.
- Latest update breaks "start without debugging" on multiple projects.
- UWP XAML is very very slow on open.
- XAML viewer freezes on 15.7.2 and 15.8.0 preview 1.1.
- Xamarin UI Test App project template missing.
- Xamarin project creation problem.
- Visual Studio crashes when creating new Mobile APP Xamarin.
- Unable to create Xamarin.Forms-Projects.
- Não consigo criar novos projetos Xamarin Forms - Can't create new projects Xamarin Forms.
- Blank project crash after update.
پاسخ به بازخوردهای پروژهها
نمایش چندی خطی یک فیلد
به نظر در نگارشهای اخیر iTextSharp حروف یونیکد نامرئی را حذف میکنند و اعمال نمیشود. به همین جهت متد یاد شده تاثیری نداشته. باید این مساله را در mailing list آنها ارسال کنید. یا در استک اور فلو در تگ iTextSharp ارسالش کنید (هر دو حالت توسط تیم iText خوانده میشود)
اگر مطلبی را هم خواستید ارسال کنید سعی کنید عمومی باشد. مثلا عنوان کنید این رشته را میخواهم راست به چپ نمایش دهم به همراه اضافه کردن یک سری حروف یونیکد خاص. iTextSharp این حروف را حذف میکند و اعمال نمیکند.
(جهت اطلاع من یکبار اینکار را در mailing list آنها انجام دادم و پاسخی نگرفتم ...)
اگر مطلبی را هم خواستید ارسال کنید سعی کنید عمومی باشد. مثلا عنوان کنید این رشته را میخواهم راست به چپ نمایش دهم به همراه اضافه کردن یک سری حروف یونیکد خاص. iTextSharp این حروف را حذف میکند و اعمال نمیکند.
(جهت اطلاع من یکبار اینکار را در mailing list آنها انجام دادم و پاسخی نگرفتم ...)
در نگارشهای قبلی ASP.NET Web forms اگر نیاز به ارسال محتوای HTML ایی وجود داشت، میبایستی کل سیستم اعتبارسنجی حداقل یک صفحه را غیرفعال کرد. برای مثال:
این نقیصهی همه یا هیچ، در ASP.NET MVC وجود ندارد و میتوان به ازای یک خاصیت خاص، اعتبارسنجی پیش فرض را با اعمال ویژگی AllowHtml موقتا غیرفعال کرد؛ اما مابقی فیلدها و خاصیتهای فرم همچنان تحت نظر سیستم اعتبارسنجیهای ورودی ASP.NET قرار خواهند داشت و به این ترتیب امکان ورود اطلاعات خطرناک، خصوصا از لحاظ مباحث XSS، حداقل در آن فیلدها وجود نخواهد داشت.
در ASP.NET 4.5 مفهوم جدیدی به نام Deferred validation معرفی شدهاست تا رفتار Web forms را نیز در برابر ورودیهای ارسال شده همانند ASP.NET MVC کند. به این معنا که اگر جهت دسترسی به مقدار کوئری استرینگ lastName همانند قبل عمل کنید:
و کاربر ورودی خطرناکی را وارد کرده باشد، همچنان استثنای A potentially dangerous request.form value was detected صادر میشود.
اما اگر در ASP.NET 4.5، کوئری استرینگ را به نحو ذیل دریافت کنید:
به صورت خودکار سیستم اعتبارسنجی غیرفعال شده و امکان دسترسی به محتوای اصلی کوئری استرینگ lastName را خواهید داشت. به این ترتیب دیگر نیازی نخواهید داشت تا اعتبارسنجی کل صفحه را برای دسترسی به یک مقدار خاص غیرفعال نمائید.
برای دسترسی به مقادیر اعتبارسنجی نشده فیلدهای یک فرم ارسالی نیز میتوان به صورت ذیل عمل کرد:
کلاس Request.Unvalidated شامل خاصیتهای Cookies، Files، Headers و امثال آن نیز میباشد.
در اینجا اگر دقت کرده باشید از UniqueID بجای Id استفاده شدهاست؛ از این جهت که مجموعه Form، حاوی Idهای واقعی دریافت شده از کاربر مانند ctl00$MainContent$MessageText میباشد.
روش دوم، استفاده از خاصیت جدید ValidateRequestMode یک کنترل سمت سرور است و در اینجا نیز میتوان صرفا اعتبارسنجی یک کنترل را بجای کل صفحه، غیرفعال کرد:
تنظیم خاصیت ذکر شده برای کنترلهای سمت سرور ضروری است. از این جهت که در حین تشکیل ViewState از محتوای این کنترلها نیز استفاده میشود. اینجا است که اگر ValidateRequestMode غیرفعال نشده باشد، باز همان خطای ورودی خطرناک را دریافت خواهید کرد.
البته برای فعال سازی اعتبارسنجی با تاخیر نیاز است اصلاح ذیل را نیز به web.config برنامه اعمال کنید (مقدار پیش فرض آن 4 است):
<%@ Page Language="C#" ValidateRequest="false" %>
در ASP.NET 4.5 مفهوم جدیدی به نام Deferred validation معرفی شدهاست تا رفتار Web forms را نیز در برابر ورودیهای ارسال شده همانند ASP.NET MVC کند. به این معنا که اگر جهت دسترسی به مقدار کوئری استرینگ lastName همانند قبل عمل کنید:
Request["lastName"]
اما اگر در ASP.NET 4.5، کوئری استرینگ را به نحو ذیل دریافت کنید:
Request.Unvalidated.QueryString["lastName"]
برای دسترسی به مقادیر اعتبارسنجی نشده فیلدهای یک فرم ارسالی نیز میتوان به صورت ذیل عمل کرد:
Request.Unvalidated.Form[txtData1.UniqueID]
در اینجا اگر دقت کرده باشید از UniqueID بجای Id استفاده شدهاست؛ از این جهت که مجموعه Form، حاوی Idهای واقعی دریافت شده از کاربر مانند ctl00$MainContent$MessageText میباشد.
روش دوم، استفاده از خاصیت جدید ValidateRequestMode یک کنترل سمت سرور است و در اینجا نیز میتوان صرفا اعتبارسنجی یک کنترل را بجای کل صفحه، غیرفعال کرد:
<asp:TextBox ID="txtASPNet" ValidateRequestMode="Disabled" runat="server" />
البته برای فعال سازی اعتبارسنجی با تاخیر نیاز است اصلاح ذیل را نیز به web.config برنامه اعمال کنید (مقدار پیش فرض آن 4 است):
<httpRuntime targetFramework="4.5" requestValidationMode="4.5" />