2010-02-08 23 views
24

मैंने नियंत्रक को पोस्ट करने के बाद RedirectToAction का उपयोग करने का प्रयास किया लेकिन यूआरएल नहीं बदला और रीडायरेक्ट काम नहीं कर रहा है। मुझे यह जोड़ने की ज़रूरत है कि जब मैं डीबग करता हूं तो रीडायरेक्ट नियंत्रक एक्शन विधि में प्रवेश करता है। यह URL बदल नहीं करता है या Index दृश्य पर जाएं, ...रीडायरेक्ट टॉक्शन काम नहीं कर रहा है

public ViewResult Index() 
    { 
     return View("Index",new TrainingViewModel()); 
    } 

public ActionResult Edit() 
{ 
    //save the details and return to list 
    return RedirectToAction("Index"); 

} 

क्या मैं गलत कर रहा हूँ?

public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
      routes.IgnoreRoute("{resource}.js/{*pathInfo}"); 

      routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); 

      routes.MapRoute(
       "Default", // Route name 
       "{controller}/{action}/{id}", // URL with parameters 
       new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
       ); 
     } 

// jQuery कॉल फ़ायरबग साथ

this.SynchValuesToReadOnly = function() { 
     window.location = $('#siteRoot').attr('href') + 'Sites/'; 

    }; 

    this.OnSiteEdit = function() { 

     //post back to the server and update the assessment details  
     var options = { 
      target: '', 
      type: 'post', 
      url: '/Site/Edit', 
      beforeSubmit: othis.validate, 
      success: othis.SynchValuesToReadOnly 
     }; 

     $('#uxSiteForm').ajaxSubmit(options); 
       }; 
+7

आपके द्वारा दिखाया गया कोड सही है। मेरा जंगली अनुमान यह है कि आप एक मानक पोस्ट नहीं कर रहे हैं (उदाहरण के लिए, रीडायरेक्ट AJAX पोस्ट के साथ काम नहीं करते हैं)। क्या आप अधिक कोड दिखा सकते हैं? –

+0

aaaaahhh .... उसे नहीं पता था। हाँ आप सही है।यह वास्तव में jquery में AJAX पोस्ट से आ रहा है और इसका मतलब है कि अगर सफल हो तो मुझे वहां से रीडायरेक्ट करना चाहिए। कोई समस्या नहीं। अपनी टिप्पणी को 'उत्तर' के रूप में रखें और जब मैं धन्यवाद – kurasa

उत्तर

65

जो कोड आप दिखाते हैं वह सही है। मेरा जंगली अनुमान यह है कि आप एक मानक पोस्ट नहीं कर रहे हैं (उदाहरण के लिए, रीडायरेक्ट AJAX पोस्ट के साथ काम नहीं करते हैं)।

ब्राउज़र AJAX पोस्ट को रीडायरेक्ट प्रतिक्रिया को अनदेखा कर देगा। यदि आपको AJAX कॉल रीडायरेक्ट प्रतिक्रिया देता है तो आपको रीडायरेक्ट करने की आवश्यकता होने पर स्क्रिप्ट में पुनर्निर्देशित करना आपके ऊपर निर्भर करता है।

+0

अच्छा उत्तर देता हूं तो मैं यह साबित करता हूं कि यह काम करता है। क्या आप समझा सकते हैं कि हमारे लिए क्यों? –

+2

जब आप एसिंक 'POST' करते हैं, तो आपको रीडायरेक्ट प्रतिक्रिया मिलने पर मैन्युअल रूप से (जेएस में) रीडायरेक्ट करना होगा। ब्राउज़र स्वचालित रूप से ऐसा नहीं करते हैं। इस बारे में सब कुछ कहना है। ब्राउजर मानते हैं कि स्क्रिप्ट इस मामले में प्रभारी है। –

+2

बस मेरे जैसे n00bs के लिए कुछ मार्गदर्शन और देने के लिए। AJAX.beginform निर्देश में, इस नए AjaxOptions {OnSuccess = "window.location.href = 'ControllerName/Action'"} और voilá –

3

चेक। पोस्ट सर्वर त्रुटि लौटा सकता है।

7

आपको "वापसी झूठी" जोड़ने की जरूरत है; अपने ऑनक्लिक जावास्क्रिप्ट घटना के अंत में। उदाहरण के लिए:

उस्तरा कोड

@using (Html.BeginForm()) 
{ 
    @Html.HiddenFor(model => model.ID) 
    @Html.ActionLink("Save", "SaveAction", "MainController", null, new { @class = "saveButton", onclick = "return false;" }) 
} 

JQuery कोड

$(document).ready(function() { 
     $('.saveButton').click(function() { 
      $(this).closest('form')[0].submit(); 
     }); 
    }); 

सी #

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult SaveAction(SaveViewModel model) 
{ 
    return RedirectToAction("Index"); 
} 
+4

किसी कारण से, मैं हमेशा भूल जाता हूं कि "वापसी" की आवश्यकता है। मान लीजिए कि मैं पुराने प्रतिक्रिया के लिए इतना उपयोग करता हूं। रीडायरेक्ट जिसे कभी "वापसी" की आवश्यकता नहीं होती है। –

1

के रूप में नीचे का प्रयास करें: अपने कार्रवाई में

वापसी:

0,123,

return Json(Url.Action("Index", "Home"));

और अपने ajax में:

window.location.href

4

मैं सिर्फ इस मुद्दे में आए और कुछ भी नहीं है मेरे लिए काम कर रहा था। यह नियंत्रक को बदल गया जो मैं आवश्यक प्राधिकरण पर रीडायरेक्ट कर रहा था - [Authorize] विशेषता किसी भी पुनर्निर्देशन को रोक रही थी।

[Authorize]//comment this out 
public class HomeController : Controller {...} 

सड़क नीचे या बड़ी परियोजनाओं में यह एक वांछित ठीक नहीं हो सकता है, लेकिन अगर आप केवल एक साधारण पुनर्निर्देशन के लिए देख रहे या बाहर शुरू, यह आपके लिए एक समाधान हो सकता है।

2

यह थोड़ा देर हो चुकी है .... लेकिन मुझे एमवीसी 5 में भी यही समस्या थी। मेरे पास एक ही नाम के साथ 2 कार्य थे, जो काफी आम है। मुझे कोई त्रुटि नहीं मिली थी जिसे मैं नियंत्रक में Application_Error या OnException में कैप्चर कर सकता था। मैंने RedirectToAction रूट वैरिएबल में एक्शन, कंट्रोलर, एरिया में कोई फायदा नहीं हुआ। मैंने पोस्टपोस्ट को POST कार्रवाई का नाम बदल दिया और सब कुछ मेरे लिए अब काम करता है। उम्मीद है की यह मदद करेगा।

public ActionResult Edit(int id) 
{ 
    return View(); 
} 

[HttpPost, ValidateAntiForgeryToken] 
public ActionResult Edit(MyInputModel myInputModel) 
{ 
    return View(); 
} 

public ActionResult Create() 
{ 
    return RedirectToAction("Edit", new {id = 1}); 
} 
संबंधित मुद्दे