2012-10-15 10 views
9

में PartialView या AJAX अनुरोध है, तो मुझे किसी वेबसाइट के उपयोगकर्ताओं को पहुंच प्रदान करना होगा। मैं छानने यहाँ कर रहा हूँ:यह निर्धारित करें कि अनुरोध ASP.NET MVC 3

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
} 

समस्या यह है कि मैं इस तरह के PartialViewRequests से 'सूचकांक' या AJAX के रूप में पूर्ण अनुरोध देखें भेद नहीं कर सकते है अनुरोधों कहता है।

इसलिए पृष्ठ 'Index' पर पहुंच है लेकिन 'PartialViewGridViewForIndex' के पास पहुंच नहीं है।

संपत्ति ControllerContext.IsChildAction या तो मदद नहीं करता है।

उत्तर

31

आप अगर एक AJAX अनुरोध इस नियंत्रक कार्रवाई आह्वान करने के लिए इस्तेमाल किया गया था निर्धारित करने के लिए IsAjaxRequest विस्तार विधि का उपयोग कर सकते हैं:

protected override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    if (filterContext.HttpContext.Request.IsAjaxRequest()) 
    { 
     // the controller action was invoked with an AJAX request 
    } 
} 
+0

धन्यवाद इसका इस्तेमाल कर सकते हैं! मैं यह देखने के लिए अब परीक्षण कर रहा हूं कि यह काम करता है या नहीं। मैं प्रतिक्रिया के साथ वापस आ रहा हूँ। –

+0

मैंने इसका परीक्षण किया है और यह काम करता है। हालांकि मैं खुद से पूछने के लिए आश्चर्य नहीं कर सकता कि आंशिक दृश्य प्रतिपादन AJAX अनुरोध द्वारा किया जाता है या नहीं। क्या आपके पास कोई विचार है? –

+0

'IsAjaxRequest' आपको बताता है कि वर्तमान अनुरोध AJAX अनुरोध था या नहीं। –

0

मैं AuthorizeAttribute बढ़ा कर एक प्राधिकरण फ़िल्टर बनाना चाहेंगे। फिर मैं अपना कोड OnAuthorize ओवरराइड में डाल दूंगा। FilterContext ऑब्जेक्ट में आप FilterContext.ActionDescriptor.MethodInfo.ReturnType.Name देख सकते हैं। आंशिक दृश्य के लिए यह PartialViewResult होगा।

0

आप के रूप

नीचे
public static class HttpRequestExtensions 
{ 
    private const string RequestedWithHeader = "X-Requested-With"; 
    private const string XmlHttpRequest = "XMLHttpRequest"; 

    public static bool IsAjaxRequest(this HttpRequest request) 
    { 
     if (request == null) 
     { 
      throw new ArgumentNullException("request"); 
     } 

     if (request.Headers != null) 
     { 
      return request.Headers[RequestedWithHeader] == XmlHttpRequest; 
     } 

     return false; 
    } 
} 

asp.net कोर 2 में HttpRequestExtensions का विस्तार और जैसा कि

if (!Request.IsAjaxRequest()) 
{ 
    //---- 
    } 
    else 
    { 
     // ------- 
    } 
संबंधित मुद्दे