MVC में, वहाँ एक तरह से मज़बूती से एक नियंत्रक में सेकंड के एक्स संख्या के लिए निष्पादन को रोकने के लिए है?

वोट
0

मैं के साथ सी # ASP.NET MVC5 उपयोग कर रहा हूँ। मैं एक रूप है, और के बाद उपयोगकर्ता फ़ॉर्म भरता है और सहेजें क्लिक करता है, मैं एक है RedirectToAction(ThankYou)- जो उन्हें एक धन्यवाद पृष्ठ पर भेजता है। यह वह जगह है जहाँ मैं कहना के लिए, 1500 एमएस निष्पादन को रोकना चाहते। तो, ThankYou दृश्य 1500 मिलीसेकंड के लिए स्क्रीन पर रहेगा, तो मैं आगे उन्हें वापस प्रपत्र रीडायरेक्ट करना चाहते हैं। यहाँ मेरी देखें कोड है - बहुत, सादा, सरल, और वेनिला:

public ActionResult ThankYou()
{
    return View();
}

मुझे क्या करना चाहते हैं की तरह कुछ है:

public ActionResult ThankYou()
{
    // pause execution for 1500 milliseconds
    return RedirectToAction(Create);
}

सबसे अच्छा तरीका यह है, चाहे वह जिस तरह से मैं सोच रहा था या कुछ और हो सकता है क्या है?

08/01/2014 को 23:16
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


4 जवाब

वोट
4

आप सर्वर साइड पर निष्पादन रोक देते हैं तो, यह बस दिखाई देगा जैसे कि सर्वर 1.5 सेकंड प्रतिक्रिया देने में ले जा रहा है। आप ब्राउज़र 1.5 सेकंड प्रतीक्षा करें और फिर उचित यूआरएल को उन अनुप्रेषित है, ThankYou दृश्य लौटना ही होगा।

दो तरीके मैं यह करने के बारे में सोच सकते हैं:

जावास्क्रिप्ट केवल समाधान

<script type="text/javascript">
window.onload = function ()
{
    setTimeout(RedirectToUrl, 1500);
}
function RedirectToUrl()
{
    window.location = "/New/Url/";
}
</script>

JQuery समाधान

<script type="text/javascript">
   $(function(){
      window.setTimeout(function(){
           window.location = "/New/Url";
       },1500);
   });
</script>

मेटा टैग समाधान

<meta http-equiv="refresh" content="2;url=http://mywebsite.com/New/Url">

मुझे नहीं लगता कि मेटा टैग दशमलव लेता है, हालांकि मैं गलत हो सकता है है। jQuery संस्करण एक छोटे से तेज़ और आसान तथापि मेटा टैग तरीके सभी ब्राउज़रों पर काम करता है, यहां तक ​​कि में जावास्क्रिप्ट अक्षम किया गया है है।

08/01/2014 को 23:22
का स्रोत उपयोगकर्ता

वोट
1

मैं पूरी तरह सही समाधान (एक क्लाइंट-साइड जावास्क्रिप्ट या के बारे में अन्य लोगों के साथ सहमत <meta>टैग रीडायरेक्ट) , तो निम्नलिखित लेने के लिए सिर्फ एक पक्ष नोट के रूप में।

कभी साथ सर्वर धागा ब्लॉक Thread.Sleep। क्या तुम सच में सर्वर साइड निष्पादन को निलंबित करने की जरूरत है, उदाहरण के लिए एक उच्च विलंबता नेटवर्क अनुकरण करने के लिए, का उपयोग अतुल्यकालिक ASP.NET , जैसे:

public async Task<ActionResult> ThankYou()
{
    await Task.Delay(2000);
    return RedirectToAction("Create");    
}

यह कई अन्य अवरोधक कॉल करने के लिए बढ़ाया जा सकता है, लेकिन फिर, यह है नहीं अपने परिदृश्य के लिए एक समाधान।

08/01/2014 को 23:38
का स्रोत उपयोगकर्ता

वोट
0

समाधान मैं साथ चला गया के अंदर था Createपोस्ट कार्रवाई, एक सफल बनाएं अनुरोध पर, मैं बस एक ही वापसी Createदेखने के लिए, लेकिन इससे पहले कि मैं क्या, मैं अपने लिए एक "धन्यवाद" संदेश जोड़ें ViewBag, इस प्रकार है:

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(string appId, AppFeedback feedback)
        {
            feedback.CreatedDate = DateTime.Now;
            feedback.CreatedBy = HttpContext.User.Identity.Name;

            response = client.PostAsJsonAsync("api/appfeedback", feedback).Result;
            if (response.IsSuccessStatusCode)
            {
                ViewBag.CustomMessage = "Thank you for submitting feedback!";
                return View("Create", new AppFeedback() { AppId = appId });
            }
            else
            {
                LoggerHelper.GetLogger().InsertError(new Exception(string.Format(
                    "Cannot create a new feedback record due to HTTP Response Status Code not being successful: {0}", response.StatusCode)));
                return View("Problem");
            }
        }

फिर, मेरे पर Createदेखने के लिए, बहुत शीर्ष पर, मेरे पास है:

<div class="content" style="margin-left:30px;">
        @if (ViewBag.CustomMessage != null)
        {
            <div>@ViewBag.CustomMessage</div>
        }
...

यह वास्तव में मेरे किसी प्रश्न का जवाब नहीं है - मैं एक अलग मार्ग जाने का फैसला किया। तो जब उपयोगकर्ता अपने प्रपत्र सबमिट करता है, वे तो एक ही रूप में फिर से बहुत शीर्ष पर एक "धन्यवाद" संदेश के साथ देखते हैं।

08/01/2014 को 23:41
का स्रोत उपयोगकर्ता

वोट
0

एक का प्रयोग करें setTimeoutजावास्क्रिप्ट में कॉल। इस तरह से, आपके विचार भार और जावास्क्रिप्ट एक नया यूआरएल फोन या 1500 एमएस के बाद रीडायरेक्ट करेगा।

setTimeout(function(){
    // code to redirect to a new url
}, 1500);

https://developer.mozilla.org/en-US/docs/Web/API/Window.setTimeout

08/01/2014 को 23:21
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more