سطوح دسترسی در فراخوانی PartialView ها

سطوح دسترسی در فراخوانی PartialView ها

بسم الله الرحمن الرحیم

زمانی که شما یک  PartialView میسازید و با استفاده ازhtmlhelper  آن را به صورت زیر فراخوانی می کنید.

 

@Html.Action("myAction", "Home", new { param = "first" })

 

 اگر آدرسPartialView  خود را در مرورگر وارد کنید صفحه PartialView برای شما نمایش داده می شود.

این یکی از مشکلاتی که در هنگام استفاده از PartialView ها درMVC   رخ می دهد، برای رفع این مشکل اگر بخواهید صرفا از طریق htmlhelpr  به آن دسترسی داشته باشید، فقط کافیست بالای متد PartialView مورد نظر Attribute یا خاصیت [ChildActionOnly] را وارد کنید

 

[ChildActionOnly]
public ActionResult myAction ()
{
    return PartialView();
}

اما یک مشکل دیگر هم هنوز وجود دارد و آن اینکه اگر قرار باشد این PartialView را از طریق Ajax  فرابخوانید با خطای زیر مواجه می شوید.

The action '' is accessible only by a child request.

 

بسم الله الرحمن الرحیم

زمانی که شما یک  PartialView میسازید و با استفاده ازhtmlhelper  آن را به صورت زیر فراخوانی می کنید.

 

@Html.Action("myAction", "Home", new { param = "first" })

 

 اگر آدرسPartialView  خود را در مرورگر وارد کنید صفحه PartialView برای شما نمایش داده می شود.

این یکی از مشکلاتی که در هنگام استفاده از PartialView ها درMVC   رخ می دهد، برای رفع این مشکل اگر بخواهید صرفا از طریق htmlhelpr  به آن دسترسی داشته باشید، فقط کافیست بالای متد PartialView مورد نظر Attribute یا خاصیت [ChildActionOnly] را وارد کنید

 

[ChildActionOnly]
public ActionResult myAction ()
{
    return PartialView();
}

اما یک مشکل دیگر هم هنوز وجود دارد و آن اینکه اگر قرار باشد این PartialView را از طریق Ajax  فرابخوانید با خطای زیر مواجه می شوید.

The action '' is accessible only by a child request.

برای رفع این مشکل نیاز به ایجاد یک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)
    {

    }
}

 

 و سپس در بالای متد خود خاصیت [AjaxOnly] را قرار دهید، در این صورت متد شما فقط از طریق Ajax  قابل دسترسی خواهد بود.

[AjaxOnly]
public ActionResult myAction ()
{
   return PartialView();
}

 

نظرات یا سوالات خودرا با ما درمیان بگذارید

0912 097 5516 :شماره تماس
0713 625 1757 :شماره تماس