در این نوشته می خواهم درباره چگونگی ساخت لینک ها به طور کامل صحبت کنم. لینک ها امکانی برای رفتن به یک برگه دیگر وب هستند که در اچ تی ام ال با تگ a (برگرفته از ) انجام می شوند. برای ساخت لینک از تگ a استفاده می کنیم و نشانی URL آدرس مقصد را به ویژگی href از تگ a می دهیم. همچنین یک رشته یا متن میان تگ های <a> و <a/> لازم است تا عنوانی برای لینک نشان داده شود. همچنین می توانیم ویژگی دیگری به نام target را مقدار دهی کنیم، اگر مقدار blank__ را بدهیم، پس نشانی درون href درون یک پنجره جدید باز می شود.

در مدل MVC نشانی URL مطابق با یک الگوی مسیر که الگوی کلی آن {Controller/Action/{Id است، بنابراین زمانی که درباره ساخت لینک ها در Razor می کنیم، می خواهیم درباره ساخت Action Link یا ساخت لینک هایی برای متدهای کلاس کنترل گر بکنیم. به بیان دیگر می خواهیم نشانی انتساب داده شده با ویژگی href را برای یک متد کلاس کنترل گر بسازیم.

ساخت Action Link برای یک متد کنترل گر از یک کلاس کنترل گر

اگر بخواهیم یک Action Link یا یک لینک به یک متد کنترل گر بسازیم، متدی از HtmlHelper به نام ()ActionLink را باید استفاده کنیم. هدف در این بخش این است که درون یک فایل نما یک لینک به متدی دیگر ولی از یک کلاس کنترل گر یکسان بسازیم، بدون آنکه بخواهیم کدهای اچ تی ام ال برای ساخت لینک با تگ a را انجام دهیم.

فرض کنید کلاس کنترل گری به نام HomeController دارید که دارای دو متد به نام های ()Index برای صفحه خانگی و به مسیر Home/Index و نشانی https:127.0.0.1:5001/home/index، متد ()About برای صفحه درباره ما و به مسیر Home/About و نشانی https:127.0.0.1:5001/home/about باشد، اکنون می خواهیم درون فایل نما Index.cshtml یک لینک به صفحه درباره ما یا بهتر است بگوییم به مسیر Home/About بسازیم.

در کد بالا نخست دستی یک تگ h3 را ساختیم، پس فایل های نما می توانند ترکیبی از تگ های اچ تی ام ال و متدهای کلاس HtmlHelper باشند. سپس متد ActionLink را با دو ورودی فراخوانی کرده ایم. ورودی نخست رشته یا متنی است که برای لینک و میان تگ های <a> و <a/> نشان داده می شود. دومین تگ نام متد کنترل گر است. توجه کنید در این مثال تنها نام متد کنترل گر، یعنی About به تنهایی نوشته شده است.

بنابراین اگر بخواهیم درون یک فایل نما یک پیوند به یک متد کنترل گر از همان کلاس کنترل گر بسازیم، پس نیازی نیست تا نام کلاس کنترل گر را بنویسیم. توجه کنید فایل های نما چگونه دسته بندی می شدند؟ برای هر کلاس کنترل گر مانند HomeController یک پوشه به نام همان کلاس، یعنی در اینجا Home در زیر پوشه Views ساخته می شد و سپس همه فایل های نما آن کلاس کنترل گر درون این زیر پوشه قرار می گرفتند. بنابراین زمانی که نام کنترل گر را در دمین پارامتر متد ()ActionLink نمی نویسید، پس ASP.NET Core می فهمد که شما می خواهید متدی از همان کلاس کنترل گر را صدا بزنید که هر دو فایل نمای مبدا و مقصد مربوط به متدهایی از کلاس یکسان هستند.

ساخت Action Link برای یک متد کنترل گر از یک کلاس کنترل گر دیگر

اگر بخواهیم که یک لینک بسازیم که به متدی از کلاس کنترل گر دیگر اشاره کند، بازهم باید متد ()ActionLink را به کار ببریم ولی باید اینجا سه پارامتر را به کار ببریم. ورودی نخست همان رشته یا متن است که می خواهیم برای لینک نشان داده شود. ورودی دوم نیز نام متد و ورودی سوم نام کلاس کنترل گر است.

در کد بالا بازهم دستی نخست یک تگ div ساختیم که مقدار col-md-12 را به ویژگی class داده ایم که یکی از کلاس های پیش فرض در Bootstrap است. سپس درون تگ div نخست تگ h3 و سپس تگ a را به کمک ()ActionLink ساخته ایم. ورودی دوم به نام EmployeeForm و ورودی سوم نیز به نام Employee است که به ترتیب برابر با نام های متد و کلاس کنترل گر هستند. بنابراین با ()ActionLink بالا تگ a همانند زیر ساخته می شود که لینکی به مسیر Employee/EmployeeForm و نشانی https://127.0.0.1:5001/employee/emloyeeform از درون فایل نمای Index.cshtml از پوشه Views/Home است.

افزودن ویژگی های دیگر به تگ a با ()ActionLink

در بالا نشان دادیم که متد ()ActionLink در کلاس HtmlHelper متدهایی Overload هستند که یکی دارای دو و دیگری دارای سه ورودی است. به طور کلی ورودی دوم نام متد و ورودی سوم نام کلاس کنترل گر است که به هر حال این دو مقدار ویژگی href را می سازند. اما دیگر ویژگی ها مانند target را چگونه برای تگ a نهایی، با ()ActionLink آماده کنیم.

برای این کار همانند گفته های پیشین باید آرگومان پایانی را به گونه {} new مشخص کنیم که درون آکولادها، هر یک از دیگر ویژگی ها مانند class یا title یا target تعریف می شوند. در کد زیر سه بار و برای ساخت سه تگ a متد a را فراخوانی کرده ایم. توجه کنید من این سه فراخوانی را درون فایل Views/Home/Index.cshtml ساخته ام و هر سه ورودی های دوم و سوم برای متد Privacy و کلاس کنترل گر Home دارند، پس هر سه مسیر Home/Privacy را برای href خودشان دارند. همچنین خواستم نشان دهم که می توانید برای ساخت لینک به یک متد دیگر از کلاس کنترل گر همسان،  نام کلاس کنترل گر را در ورودی سوم بیاورید ولی دیدیم که اجباری نیست.

برای نخستین فراخوانی در آخرین ورودی، از عبارت class@ کمک گرفتم تا مقدار رشته btn btn-primary را به ویژگی class تگ a بدهم. کلاس btn btan-primary کلاسی پیش فرض در Bootstrap است که یک دگمه را می سازد و سپس در اینجا نوشته فرستاده شده در ورودی یکم به عنوان متن دگمه استفاده می شود. همچنین در دو دیگر فراخوانی ها نیز ویژگی class را نوشته ام. در دومین فراخوانی با عبارت title@ عنوان یا متنی را مشخص کرده ام که به ویژگی title تگ a داده می شود. متن انتساب داده شده به ویژگی title در تگ a هر گاه ماوس روی آن لینک برود، نشان داده می شود. در سومین فراخوانی نیز ویژگی target را برابر با رشته blank_ گذاشته ام. کد و شکل زیر خروجی کدهای بالا را نشان می دهد.

دقت کنید که ورودی چهارم همگی برابر با null است که در دنباله درباره آن گفته شده است.

ساخت Action Link با پروتکل HTTPS

HTTPS پروتکل امنیتی برای وب است که همان کاربرد HTTP را دارد ولی برای حفظ امنیت ارتباط میان کلاینت (مانند مرورگر) و وب سرور (مانند Apache و IIS) از پروتکل SSL یا گواهینامه های SSL کمک می گیریم تا ارتباط رمزگذاری شود. بدون اینکه بخواهیم درباره پاسه و اساس HTTPS بگویم، متد ()ActionLink را می تواند برای ساخت نشانی های URL دارای پروتکل //:https به کار ببریم.

در بخش بالا گفتیم که چهارمین ورودی برابر با null بود و این همان ورودی است که باید رشته https را به جای null دریافت کند تا نشانی URL با پروتکل //:https ساخته شود. بنابراین کد زیر بازنویسی شده آخرین فراخوانی متد ()ActionLink در بالا که چهارمین ورودی آن برابر با https است. در دومین کد زیر می بینید که سر راست نشانی URL با پروتکل https را ساخته است. همچنین ورودی های پنجم، ششم و هفتم null هستند و آخرین ورودی نیز ویژگی ها را تعیین می کند. برای آشنایی با Override ها اینجا را بخوانید.

 مشخص کردن نام دامنه و لینک به دامنه ای دیگر

در کد بالا پنجمین ورودی (پس از مشخص کردن پروتکل https) نیز null فرستاده شده است. این ورودی رشته ای را دریافت می کند که برابر نام دامنه یا آدرس IP است. برای نمونه می توانیم برای هاست های محلی localhost:5001 یا 127.0.0.2:5001 را مشخص کنیم که در پروژه های ASP.NET Core MVC شماره ۵۰۰۱، شماره پورت برای https است. در کنار اینها می توانیم برای نمونه هر نام دامنه دیگری را مانند mydomain.com را بگذاریم.

همچنین در کد بالا من ورودی های دوم و سوم را null کرده ام، برای اینکه می خواهم به یک لینک بیرونی از دامنه سایت مانند سایت https://dataset-academy.com اشاره کنم. پس چون سایت من دارای پروتکل https است، ورودی چهارم برابر با رشته https و ورودی پنجم نیز برابر با نام دامنه، یعنی dataset-academy.com است. دیگر ورودی های تا پایان null هستند. پس چون آخرین ورودی null است، پس من هیچ یک از دیگر ویژگی های تگ a را مشخص نکرده ام، پس تگ زیر ساخته می شود.