Hem ajax çağrılarından hem de RenderAction yoluyla çağrılacak denetleyicideki bir eylemi işaretleyebilmeyi istiyorum. Sorun, bu özelliklerin her ikisinin de farklı soyutlamalar türetmesi veya uygulanmasıdır. Bir çıkış yolu şu:AjaxOnlyAttribute ve ChildActionOnlyAttribute öğelerini tek eylem filtresine birleştirme
[AjaxOnly]
PartialViewResult GetViewAjax(int foo) { return GetView(foo); }
[ChildActionOnly]
PartialViewResult GetView(int foo) { ... }
Ancak bu hiç de düzgün değildir.
public sealed class AjaxOnlyAttribute : ActionFilterAttribute
{
#region Public members
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext == null)
throw new ArgumentNullException("filterContext");
if (filterContext.HttpContext.Request.Headers["X-Requested-With"] != "XMLHttpRequest")
filterContext.Result = new HttpNotFoundResult();
}
#endregion
}
Bu yöntem MVC3 vadeli alınır: AjaxOnly
Ben edilir bahsediyorum bağlıyor. durum şu dev ekibi tarafından yapılan ve der değildi
filterContext.HttpContext.Request.IsAjaxRequest()
neden önemli açıklama:
// Dev10 #939671 - If this attribute is going to say AJAX *only*, then we need to check the header
// specifically, as otherwise clients can modify the form or query string to contain the name/value
// pair we're looking for.
Neden? İşleminizin hem RenderAction() hem de ajax istekleri aracılığıyla farklı yerlerde yeniden kullanıldığını varsayalım. Bunların farklı sayfalarda yeniden kullanıldığını varsayalım ve birçok yer için standart bir araç paneli çizerek farklı bağlamlarda –
@ Hohhi'den biraz farklı olarak kullanıldığından, eyleminizin yalnızca bir AJAX çağrısı veya bir Çocuk eylemi aracılığıyla erişilebilir olmasını istiyorsunuz. ? –
Tam olarak, öneriniz için teşekkür ederim, ben soru güncellemek ve bir zaman içinde ne kadar yol aldığımı anlatmak istiyorum –