मैं सिर्फ महसूस किया कि मैं पूरी तरह से इस सवाल का जवाब नहीं था, इसलिए मैं यहाँ शीर्ष करने के लिए जोड़ा जा रहा है, और नीचे मेरे पुराने जवाब छोड़ने:
समस्या
जब एक iFrame पर एक फ़ाइल पोस्ट है, "एक्स-अनुरोधित-साथ" शीर्षलेख सेट नहीं है और आप जावास्क्रिप्ट में सामान्य फ़ॉर्म पोस्ट के लिए विशिष्ट अनुरोध शीर्षलेख सेट नहीं कर सकते हैं। आपको अन्य चालों का सहारा लेना होगा, जैसे कि आपके पोस्ट के साथ एक छुपा फ़ील्ड भेजना जिसमें मूल्य शामिल है, और फिर इस स्थिति की जांच करने के लिए "IsAjaxRequest" एक्सटेंशन विधि को बदलें या ओवरराइड करें। How to override an existing extension method?
शायद सबसे अच्छा विकल्प शायद अपने iFrame अपलोड पोस्ट का पता लगाने के परिवर्तन के साथ डिफ़ॉल्ट MVC विस्तार विधि कोड एक अलग नाम के साथ अपने स्वयं विस्तार विधि, आधार पर शामिल करने के लिए किया जाएगा, और फिर कहीं भी आपका एक्सटेंशन कहां विधि का उपयोग आपको इसकी आवश्यकता है।
jQuery वास्तव में 'एक्स-अनुरोधित-साथ' शीर्षलेख को डिफ़ॉल्ट रूप से 'XMLHttpRequest' पर सेट करता है। जब तक आप jQuery पर अपने सभी AJAX कॉल करने के लिए सावधान रहें, तब तक यह काफी उपयोगी है।
अपनी आवश्यकताओं पर निर्भर करता है, यह आसान सेटअप करने के लिए एक कार्रवाई फिल्टर में पता लगाने इसलिए की तरह जहां जरूरत के लिए इसका इस्तेमाल, या यहाँ तक कि इसे बनाने में एक नियंत्रक वर्ग में है:
[jQueryPartial]
public abstract class MyController : Controller
{
public bool IsAjaxRequest { get; set; }
}
ActionFilterAttribute:
public class jQueryPartial : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// Verify if a XMLHttpRequest is fired.
// This can be done by checking the X-Requested-With
// HTTP header.
MyController myController = filterContext.Controller as MyController;
if (myController != null)
{
if (filterContext.HttpContext.Request.Headers["X-Requested-With"] != null
&& filterContext.HttpContext.Request.Headers["X-Requested-With"] == "XMLHttpRequest")
{
myController.IsAjaxRequest = true;
}
else
{
myController.IsAjaxRequest = false;
}
}
}
}
और कार्यान्वयन का उपयोग:
public class SomeController : MyController
{
public ActionResult Index()
{
if (IsAjaxRequest)
DoThis();
else
DoThat();
return View();
}
}
आपके कोड में , IsAjaxRequest हमेशा सत्य है, कोड के उद्देश्य को हरा रहा है .... साथ ही यह वही कार्यक्षमता है जो एक्सटेंशन विधि में मौजूद है ... ताकि वास्तव में आपकी मदद न हो। – zowens
जानकारी के लिए धन्यवाद। आपके लीड के बाद, मैंने JQuery के माध्यम से एक छिपी हुई फॉर्म वैल्यू ("isFileUploadAjaxPost") को गतिशील रूप से जोड़ दिया। नियंत्रक में, मैं उस फॉर्म चर के लिए जाँच करता हूं। यदि यह मौजूद है, तो मैं नई अपलोड की गई फ़ाइल के लिए "संपादन" दृश्य प्रदर्शित करने के लिए RedirectToAction को कॉल करने से पहले इस मान को संग्रहीत करने के लिए TempData का उपयोग करता हूं। प्राप्त करने की क्रिया विधि में, मैं अनुरोध करता हूं कि अनुरोध "AJAX" है या नहीं, यह निर्धारित करने के लिए कि मैं अनुरोध करता हूं कि यह अनुरोध करने के लिए Request.IsAjaxRequest() (जैसा कि मैं सभी के साथ कर रहा हूं) के साथ-साथ मेरा TempData मान भी जांचता हूं। बहुत अच्छा काम करता है। धन्यवाद! – goombaloon
@zowens: मैंने अब कोड तय किया है, लेकिन हाँ, मुझे इसे बनाने के बाद एहसास हुआ और फिर IsAjaxRequest एक्सटेंशन विधि को देखकर यह वही है। मैंने कोड को एक्शनफिल्टर से अनुकूलित किया है जो अनुरोध प्रकार के आधार पर गतिशील रूप से मास्टर पेज सेट करता है जो निश्चित रूप से उपर्युक्त कोड की तुलना में कुछ हद तक कम अनावश्यक है। – Jay