دوتا سوال دارم تقریبا به هم نزدیک هستن:
1- راهی هست که وقتی از پارشیال استفاده میکنیم ، وقتیکه url پارشیال بصورت مستقیم صدا زده میشه به صفحه پارشیال نرود؟
مثلا فرض کنید قسمت لاگین سایت رو با پارشیال درست کردیم و به صورت modal اون رو صدا میزنیم حالا اگر آدرس مستقیم اون رو در url مرورگر وارد کنیم ، صفحه پارشیال لاگین رو نمایش میده.
2- وقتی از route آنگولار استفاده میکنیم ، آدرس url مرورگر تغییر میکنه .حالا وقتی صفحه رو رفرش کنیم میره صفحه پارشیال رو برامون میاره.
حالا اینم میخوام وقتی صفحه رفرش میشه همون صفحه route آنگولار رو نمایش بده.
سلام
دوست عزیز شما در View ایی که میخواهید Action رو صدا بزنید و در Action تصمیم بگیرید که چه View ایی را برگردانید
@Html.Action("ActionName","ControllerName")
و در کنترلر و در Action صدا زده شده کد زیر را درج کنید
if (User.Identity.IsAuthenticated) { var _User = db.User.FirstOrDefault(u => u.User_UserName == User.Identity.Name); return PartialView("_UserProfile", _User); } else { return PartialView("_Login"); }
فقط توجه داشته باشید که هر دو پارشیال را در پوشه هم نام کنترلر که در قسمت View ها قرار دارد ایجاد کنید
ببخشید این اصلا جواب سوال من نیست
فک کنم سوالم رو اشتباه متوجه شدین
برای اینکه مثال واضحی بزنم همین سایت رو مثال میزنم
شما وقتی روی ثبت نام کلیک می کنید یک modal باز میشه
حالا اگر من مستقیم آدرس رو در url باز کنم
دوست عزیز پارشیال یک فایل فیزیکی با پسوند cshtml یا vbhtml است که وقتی صدا زده بشه لود میشه اگه میخواهید که پارشیال هنگام فراخوانی لود نشود باید در Razor برا لود شدن یا نشدن شرط بگذارید
@if (true) { //کدها و تصمیمات در صورت درست بودن شرط } else { //کدها و تصمیمات در صورت درست نبودن شرط }
برای سوال 1
بالای Action از صفت [ChodActionOnly] استفاده کنید
استاد صفت [ChildActionOnly]
چه کاری رو انجام میده؟
فقط به درخواست هایی که خود برنامه ارسال شده پاسخ میده
و باعث میشه از طریق آدرس مستقیم نشه به Action دسترسی پیدا کرد
ممنون آقای مدائنی
این برای actionlink خوب کار میکنه
@Html.Action("ChildAction", "Home", new { param = "first" })
اما برای modal جواب نمیده، آیا برای این هم راه حلی هست؟
و یک سوال دیگه آیا مدیریت حطایی برای این هست که وقتی به صورت مستقیم url رو وارد میکند صفحه خطای زیر رو نشون نده؟
The action '' is accessible only by a child request.
راه حل رو پیدا کردم
برای درخواست های ajax به صورت زیر عمل میکنیم:
[AjaxOnly] public ActionResult Login() { return PartialView(); }
حالا Attribute رو میسازیم:
public class AjaxOnlyAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { if (!filterContext.HttpContext.Request.IsAjaxRequest()) filterContext.HttpContext.Response.Redirect("/error/404"); } public override void OnActionExecuted(ActionExecutedContext filterContext) { } }
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)