2009-12-26 16 views
6

अद्यतन करने के बजाय पेज पर अजाक्स रीडायरेक्ट करें मैं लॉगिन के लिए आंशिक दृश्य का उपयोग कर रहा हूं और उपयोगकर्ता को सफलता पर नए पृष्ठ पर रीडायरेक्ट करना चाहता हूं और मॉडल अमान्य होने पर आंशिक दृश्य में सत्यापन त्रुटियों को प्रदर्शित करना चाहता हूं। AJAX लक्ष्य अद्यतन किया जा रहा है और सफलता या विफलता। यदि मॉडल मान्य है, तो यह अद्यतन लक्ष्य में पूरा नया पृष्ठ दिखा रहा है लेकिन मैं इसे नए पृष्ठ पर रीडायरेक्ट करना चाहता हूं। मैंने रीडायरेक्ट और रीडायरेक्टोएक्शन की कोशिश की है लेकिन इसे इच्छा परिणाम नहीं मिल रहे हैं। किसी नए पृष्ठ पर रीडायरेक्ट करने के लिए मैं क्या कर सकता हूं, इस पर कोई भी विचार, लक्ष्य अपडेट न करें। साथ ही, अगर मैं गलत दृष्टिकोण का उपयोग कर रहा हूं तो मुझे बताएं।लक्ष्य

आंशिक देखें कोड:

public ActionResult Logon(LogOnModel model,string returnUrl) 
     { 
      if (ModelState.IsValid) 
      { 
      //Login Logic Code   
      if (!String.IsNullOrEmpty(returnUrl)) 
        { 
         return Redirect(returnUrl); 
        } 
        else 
        { 
         return RedirectToAction("Index", "App"); 
        } 

      } 

      // If we got this far, something failed, redisplay form 
      if (Request.IsAjaxRequest()) 
          return PartialView("LogOnControl"); 

      return View(model); 
     } 

उत्तर

8

एक रीडायरेक्ट आप क्लाइंट की तरफ यह सब करने की ज़रूरत को पूरा करने के:

<% using (Ajax.BeginForm(
     "LogOn", 
     null, 
     new AjaxOptions { 
      HttpMethod = "POST", 
      UpdateTargetId = "SignInForm" 
     }, 
     new { 
      id = "SignInForm", ReturnUrl = Request.QueryString["ReturnUrl"] 
     })) { %> 

        <<Page HTML Controls>> 

        <input type="submit" value="Log On" /> 


      <% } %> 

यहाँ प्रासंगिक नियंत्रक कोड है। तो अब आप UpdateTargetId का उपयोग नहीं कर सकते हैं, लेकिन इसके बजाय आपको OnSuccess विकल्प का उपयोग करना चाहिए। तुम भी Logon नियंत्रक कार्रवाई को संशोधित करने के लिए इतना है कि एक रीडायरेक्ट के मामले में आप परीक्षण करता है, तो आप इसे एक ajax अनुरोध है और आवश्यकता होगी इस मामले में पुनर्निर्देश url जो जावास्क्रिप्ट में उपयोग किया जाएगा के साथ एक JSON ऑब्जेक्ट वापसी:

if (ModelState.IsValid) 
{ 
    if (string.IsNullOrEmpty(returnUrl)) 
    { 
     returnUrl = Url.Action("Index", "App"); 
    } 
    if (Request.IsAjaxRequest()) 
    { 
     return Json(new { returnUrl = returnUrl }); 
    } 
    return Redirect(returnUrl); 
} 

और दृश्य में:

<% using (Ajax.BeginForm(
    "LogOn", 
    null, 
    new AjaxOptions { 
     HttpMethod = "POST", 
     OnSuccess = "success" 
    }, 
    new { 
     id = "SignInForm", ReturnUrl = Request.QueryString["ReturnUrl"] 
    })) { %> 
     <<Page HTML Controls>> 
     <input type="submit" value="Log On" /> 
<% } %> 

<script type="text/javascript"> 
function success(context) { 
    var returnUrl = context.get_data().returnUrl; 
    if (returnUrl) { 
     window.location.href = returnUrl; 
    } else { 
     // TODO: update the target form element with the returned partial html 
    } 
} 
</script> 
संबंधित मुद्दे