نحوه آدرس دهی (Routing) Area در کلاس StartUp در Asp net core
دوستان سلام...
من یک مشکلی دارم توی آدرس دهی فرم ها برای ارسال به سمت سی شارپ
به فرض مثال url مورد نظرمن هست :
https://localhost:369/Admin/Users/Remove
از اتریبیوت های خود دات نت کور ، همون asp-action و asp-controller و asp-area هم استفاده می کنم اما وقتی تست می کنم
Area Admin به صورت یک پارامتر درمیاد مثل این :
https://localhost:369/Users/Remove?area=Admin
در ضمن از Tag Helper هم استفاده می کنم.
<form id="form_changePassword_confrim" asp-area="Admin" asp-controller="Users" asp-action="SetUserPassword" method="POST" data-ajax="true" data-ajax-success="OnSuccessChangePassword">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">تغییر رمز ورود</h5>
<button type="button" class="close ml-1" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<p>لطفا یک رمز عبور حداقل 6 کارکتری وارد نمایید</p>
<input type="text" class="form-control" asp-for="SetUserPassword.NewPassword" />
<span asp-validation-for="SetUserPassword.NewPassword" class="text-danger small"></span>
<input type="hidden" asp-for="SetUserPassword.UserId" />
</div>
<div class="modal-footer">
<button type="submit" class="btn btn-success ml-2">تایید تغییر رمز</button>
<button type="button" class="btn btn-default" data-dismiss="modal">انصراف</button>
</div>
</form>
این هم کلاس StartUp.cs
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
//------------------------ Pattern For Admin Pages
endpoints.MapControllerRoute(
name: "areas",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
//------------------------------ Pattern for Pages in the Navbar
endpoints.MapControllerRoute(
name: "Gallery",
pattern: "/Gallery",
defaults: new { controller = "Home", action = "Gallery" });
endpoints.MapControllerRoute(
name: "Our-Support",
pattern: "/Our-Support",
defaults: new { controller = "Home", action = "OurSupport" });
endpoints.MapControllerRoute(
name: "About-Us",
pattern: "/About-Us",
defaults: new { controller = "Home", action = "AboutUs" });
endpoints.MapControllerRoute(
name: "Contact-Us",
pattern: "/Contact-Us",
defaults: new { controller = "Home", action = "ContactUs" });
//----------------- Pattern for blog
endpoints.MapControllerRoute(
name: "post",
pattern: "mag/{name}",
defaults: new { controller = "Mag", action = "ShowPost" });
endpoints.MapControllerRoute(
name: "magCategoryPage",
pattern: "mag/category/{title}/page/{page}/",
defaults: new { controller = "Mag", action = "Categorys" });
endpoints.MapControllerRoute(
name: "magCategory",
pattern: "mag/category/{title}/",
defaults: new { controller = "Mag", action = "Categorys" });
endpoints.MapControllerRoute(
name: "mag",
pattern: "mag/page/{page}/",
defaults: new { controller = "Mag", action = "Index" });
پاسخ هوش مصنوعی
برای حل مشکل شما و اینکه آدرس دهی به صورت مناسب انجام شود، مطمین شوید که ترتیب و الگوی مسیرها در کلاس Startup.cs به درستی تنظیم شده است. شما باید الگوی مختص به Area ها را به صورت مناسب در بالای سایر الگوها قرار دهید. به این صورت:
app.UseEndpoints(endpoints =>
{
//------------------------ Pattern For Admin Pages
endpoints.MapControllerRoute(
name: "areas",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
// سایر الگوها در اینجا
});
با تنظیمات بالا، اپلیکیشن شما باید URL صحیح را تولید کند و به صورت زیر عمل کند:
https://localhost:369/Admin/Users/Remove
همچنین از Tag Helper خود به درستی استفاده کرده اید، بنابراین مطمین شوید که asp-area را به درستی تعیین کرده اید.
ببینید بنظرم شما کلا مفهوم Area رو اشتباه متوجه شده باشید. در کدهایی که نوشتید شما برای هر View یک Route ایجاد کردید !!!
مثلا برای ویوی About Us یا Contact Us یا Our-Support هر کدوم رو یک مسیر تعریف کردید چرا ؟؟؟ خب همون مسیر default که ابتدای کار تعریف کردید برای همه اینا کافی هست.
نکته بعدی اینکه شما در سوالتون (قبل از ویرایش سوال) گفتید چنین Url رو میخواید فراخوانی کنید.
https://localhost:369/Admin/Users/Remove
ولی در کدهای Html اصلا هیچ دکمه یا Button که برای Remove باشه دیده نمیشه. بنظرم باید در مورد Routing در Core بیشتر مطالعه کنید چون در مفهوم کار اشکال دارید.
تفاوت مسیریابی در نسخه های Core
در مورد Url هم سوالتون کمی ناقص هست و اون چیزی که می خواید در کدهای Html نیست کلا که بشه اشکالتون رو متوجه شد.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2