اشتراکها
نظرات مطالب
Cookie - قسمت سوم
فرقی نمیکند. مباحث پایه Forms Authentication برای تمام فناوریهایی که از آن استفاده میکنند یکسان است.
نظرات مطالب
تولید SiteMap استاندارد و ایجاد یک ActionResult اختصاصی برای Return کردن SiteMap تولید شده
سلام امکان استفاده این در ASP.NET Web forms هست چون من میخوام این کارو با استفاده از یک httphandler بکنم ؟
نظرات مطالب
معماری لایه بندی نرم افزار #4
اگر توجه کنید از الگوی MVP در Web Forms استفاده شده و نه در MVC.
به روز رسانی
در آخرین تغییرات وابستگیهای AngularJS 2.0 این موارد لحاظ شدهاند:
الف) در فایل package.json بجای es6-promise و es6-shim، فقط از core-js استفاده شدهاست:
ب) فایل typings.json واقع در ریشهی پروژه، جهت ذکر core-js به صورت زیر تغییر یافته است:
ج) اینبار ابتدای فایل main.ts به صورت زیر تغییر میکند:
د) به علاوه محتوای فایلهای systemjs.config.js و index.html نیز تغییر یافتهاند.
یک نکته: اگر در پوشهی typings قدیمی شما هنوز فایلهای es6-shim موجود هستند، باید آنها را حذف کنید. چون تعاریف آن، با تعاریف core-js جدید، تداخل میکنند و خطای «error TS2300: Duplicate identifier» را دریافت خواهید کرد.
پوشهی typings جدید را از اینجا دریافت کنید: typings.zip
در آخرین تغییرات وابستگیهای AngularJS 2.0 این موارد لحاظ شدهاند:
الف) در فایل package.json بجای es6-promise و es6-shim، فقط از core-js استفاده شدهاست:
"dependencies": { // ... "core-js": "^2.4.0", // ... },
{ "ambientDependencies": { "core-js": "registry:dt/core-js#0.0.0+20160317120654", "jasmine": "registry:dt/jasmine#2.2.0+20160505161446", "node": "registry:dt/node#4.0.0+20160509154515" } }
/// <reference path="../typings/browser/ambient/core-js/index.d.ts" /> /// <reference path="../typings/browser/ambient/node/index.d.ts" />
یک نکته: اگر در پوشهی typings قدیمی شما هنوز فایلهای es6-shim موجود هستند، باید آنها را حذف کنید. چون تعاریف آن، با تعاریف core-js جدید، تداخل میکنند و خطای «error TS2300: Duplicate identifier» را دریافت خواهید کرد.
پوشهی typings جدید را از اینجا دریافت کنید: typings.zip
یک نکتهی تکمیلی: روش سازگار کردن اعتبارسنجی فرمهای استاندارد Blazor با کلاسهای CSS بوت استرپ 4 و 5
زمانیکه از EditForm و کامپوننتهای توکار Blazor استفاده میکنیم، اگر کامپوننتی در وضعیت اعتبارسنجی شده قرار داشته باشد، با کلاس valid:
class="modified valid form-control"
class="modified invalid form-control"
EditContext = new EditContext(Model); EditContext.SetFieldCssClassProvider(new BootstrapFieldCssClassProvider());
using System; using System.Linq; using Microsoft.AspNetCore.Components.Forms; namespace BlazorComponents { /// <summary> /// Supplies CSS class names for form fields to represent their validation state or other state information from an EditContext. /// </summary> public class BootstrapFieldCssClassProvider : FieldCssClassProvider { /// <summary> /// Gets a string that indicates the status of the specified field as a CSS class. /// </summary> public override string GetFieldCssClass(EditContext editContext, in FieldIdentifier fieldIdentifier) { if (editContext == null) { throw new ArgumentNullException(nameof(editContext)); } var isValid = !editContext.GetValidationMessages(fieldIdentifier).Any(); if (editContext.IsModified(fieldIdentifier)) { return isValid ? "is-valid" : "is-invalid"; } return isValid ? "" : "is-invalid"; } } }
داشتن Urlهای تمیز و با معنا یکی از ویژگیهای یک سایت خوب هست و بهترین روش برای بازنویسی URLها یا همان Url Routing، استفاده از امکانات توکار خود ASP.Net برای این کار است. در یک مثال کوچک برای WebFormها این کار را بررسی خواهیم کرد.
ابتدا باید فضای نام System.Web.Routing را در فایل Global.asax اضافه کنیم .
تابع RouteTable.Routes.MapPageRoute سه ورودی میگیرد. ورودی اول یک نام برای الگوی تبدیل ماست که در مثال بالا، "Product" نام گرفته است. ورودی دوم، الگوی تبدیل ماست که میگوید Url هایی به شکل {Product/{Name را به صفحهی Product.aspx بفرست و در صفحهی Product.aspx میتوانیم مقدار {Name} را توسط ["Page.RouteData.Values["Name بدست بیاوریم . ورودی سوم نیز صفحهی مقصد میباشد.
این الگو یو آر الی مثل "این-یک-تست-است/Post/2" را به صفحهی PostShow.aspx میفرستد و در صفحهی مقصد میتوانیم توسط ["Page.RouteData.Values["pi که منظور از pi همون PostId یا کد مقاله ما است، خوانده و نمایش دهیم. دلیل ارسال قسمت {pt} یا همان "این-یک-تست-است" میباشد و از pt منظورمان PostTitile یا عنوان مقالهاست که در SEO سایت تاثیر زیادی دارد.
وقتی روی لینک کلیک میشود، به طور مثال چنین آدرسی در قسمت آدرس مرورگر ظاهر میشود. دلیل استفاده از Replace هم برای زیباتر شدن Url هست. چون فضای خالی در Url زیبا نیست.
و در صفحهی PostShow.aspx به این نحو میتوانیم اطلاعات مقالهی مورد نظر را بدست بیاریم:
یا حتی برای نشان دادن اطلاعات از این روش استفاده کنیم:
منطورم استفاده از asp:RouteParameter در <WhereParameters> برای انتخاب مقاله است.
مطالعه بیشتر
ابتدا باید فضای نام System.Web.Routing را در فایل Global.asax اضافه کنیم .
سپس توسط RouteTable.Routes.MapPageRoute در Application_Start میتوانیم الگوهای تبدیل Urlهای خود را بنویسیم.
protected void Application_Start(object sender, EventArgs e) { RouteTable.Routes.MapPageRoute("Product", "Product/{Name}", "~/Product.aspx"); }
با این الگو میتوانیم لینک هایی مثل "لبتاب/Product" ایجاد کنیم و در صفحهای که میخواهیم اطلاعات محصولمان را نشان دهیم از ["Page.RouteData.Values["Name که همان مقدار لبتاب را بر میگرداند، استفاده کنیم.
یک مثال واقعیتر؛ مثالی که در URLهای مقالات همین سایت هم از آن استفاده شده البته از نوع MVC .
RouteTable.Routes.MapPageRoute("PostDetail", "Post/{pi}/{pt}", "~/PostShow.aspx");
نحوه استفاده از این تبدیل هم اینطور میتواند باشد.
ساخت لینک :
<a href='<%# string.Format("/Post/{0}/{1}",Eval("PostID"),Eval("PostTitle").ToString().Replace(" ","-")) %>'>
Post/12/چگونه-طراحان-وب-به-جهنم-می-روند!؟
int pi = int.Parse(Page.RouteData.Values["pi"].ToString()); Posts post = (from p in con.Posts where p.PostID == pi select p).FirstOrDefault();
<asp:EntityDataSource ID="EntityDataSource1" runat="server" AutoGenerateWhereClause="True" ConnectionString="name=WebWorkEntities" DefaultContainerName="WebWorkEntities" EnableFlattening="False" EntitySetName="Posts" EntityTypeFilter="Posts" Where="" Select=""> <WhereParameters> <asp:RouteParameter Name="PostID" RouteKey="pi" DbType="Int32" DefaultValue="0" /> </WhereParameters> </asp:EntityDataSource>
و برای زیباتر شدن کد نویسی، بهتر است الگوهای تبدیل را در یک تابع جدا بنویسیم:
protected void Application_Start(object sender, EventArgs e) { RoutingSite(RouteTable.Routes); } public static void RoutingSite(RouteCollection route) { route.MapPageRoute("PostDetail", "Post/{pi}/{pt}", "~/PostShow.aspx"); route.MapPageRoute("RouteAbout", "About-Me", "~/About.aspx"); }
اشتراکها
نگارش نهایی NET Core 3.0. منتشر شد
We’re excited to announce the release of .NET Core 3.0. It includes many improvements, including adding Windows Forms and WPF, adding new JSON APIs, support for ARM64 and improving performance across the board. C# 8 is also part of this release, which includes nullable, async streams, and more patterns. F# 4.7 is included, and focused on relaxing syntax and targeting .NET Standard 2.0. You can start updating existing projects to target .NET Core 3.0 today. The release is compatible with previous versions, making updating easy.